Post

Apache Spark 클러스터 구축 가이드

spark cluster 구축 기록

Apache Spark 클러스터 구축 가이드

Apache Spark 클러스터 구축 가이드

클러스터 구성

구분호스트명IP 주소역할
PC1master192.168.45.192마스터 노드
PC2worker1192.168.45.193워커 노드
PC3worker2192.168.45.194워커 노드

1. 마스터 노드 설정 (PC1)

이미지 다운로드

1
docker pull apache/spark:latest

마스터 컨테이너 실행

1
2
3
4
5
6
7
8
9
10
# 기존 컨테이너 정리
docker stop spark-master
docker rm spark-master

# 마스터 실행 (--network host 필수!)
docker run -d \
  --name spark-master \
  --network host \
  apache/spark:latest \
  /opt/spark/bin/spark-class org.apache.spark.deploy.master.Master

접속 정보

서비스URL설명
마스터 UIhttp://192.168.45.192:8080클러스터 상태 모니터링
애플리케이션 UIhttp://192.168.45.192:4040실행 중인 Job 모니터링

2. 워커 노드 설정 (PC2, PC3)

이미지 다운로드

1
docker pull apache/spark:latest

워커 컨테이너 실행

1
2
3
4
5
6
7
# PC2, PC3 각각에서 실행
docker run -d \
  --name spark-worker-1 \
  --network host \
  apache/spark:latest \
  /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker \
  spark://192.168.45.192:7077

중요: --network host 옵션이 핵심!
Docker 네트워크 격리 문제 해결

3. Spark 애플리케이션 실행

마스터 컨테이너 접속

1
docker exec -it spark-master bash

실행 모드 비교

모드명령어특징
클러스터 모드--master spark://192.168.45.192:70773대 PC 분산 처리
로컬 모드--master local[2]단일 PC 내 멀티코어

클러스터 모드 실행

1
2
3
4
5
6
7
8
# 분산 처리 (3대 PC 클러스터 활용)
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://192.168.45.192:7077 \
  --executor-memory 1g \
  --total-executor-cores 2 \
  ./examples/jars/spark-examples_2.13-4.0.0.jar \
  10

로컬 모드 실행 (비교용)

1
2
3
4
5
6
7
# 단일 PC에서만 실행
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master local[2] \
  --deploy-mode client \
  ./examples/jars/spark-examples_2.13-4.0.0.jar \
  10

4. 설정 옵션

필수 옵션

옵션설명
--masterspark://192.168.45.192:7077마스터 주소 (필수)
--networkhostDocker 네트워크 격리 해결 (필수)

성능 옵션

옵션기본값설명
--executor-memory1gExecutor 메모리 설정
--total-executor-cores2전체 CPU 코어 수
파라미터 (마지막)-SparkPi의 파티션 수
(작업 분할 단위)

생략 가능한 옵션

옵션기본값생략 이유
--deploy-modeclient기본값이므로 생략 가능
--conf spark.driver.host자동감지--network host 사용시
자동 감지

5. 성공 확인 방법

웹 UI 확인 항목

항목기댓값위치
Workers2개마스터 UI 메인 화면
Worker IP192.168.45.193,
192.168.45.194
Workers 섹션
상태ALIVEWorkers 섹션
Core/Memory사용량 표시Workers 섹션

로그 확인 지표

1
2
3
4
5
INFO TaskSetManager: Starting task 0.0... (192.168.45.193,executor 1)
INFO TaskSetManager: Starting task 1.0... (192.168.45.194,executor 0)
...
Pi is roughly 3.1414475707237854
INFO DAGScheduler: Job 0 finished: took 3778.800037 ms

6. 트러블슈팅

주요 문제와 해결책

문제증상해결책
Executor 연결 실패Command exited with code 1워커에 --network host 추가
포트 바인딩 오류Cannot assign requested address마스터에도 --network host 추가
워커 미연결웹 UI에 워커 안 보임방화벽 또는 IP 설정 확인

디버깅 명령어

목적명령어
워커 로그 확인docker logs spark-worker-1
마스터 로그 확인docker logs spark-master
컨테이너 네트워크 확인docker exec spark-worker-1 hostname -I

7. 성과 요약

항목결과
클러스터 구성3대 PC 분산 클러스터 구축 완료
분산 처리20개 태스크를 2개 워커로 분산 실행
성능병렬 처리로 실행시간 단축 확인
네트워크--network host로 통신 문제 해결
This post is licensed under CC BY 4.0 by the author.