-
[Spark] Docker 로 Spark Cluster 구현하기 ( Standalone Mode )Spark 2022. 7. 18. 04:40728x90반응형
- 목차
소개.
Docker 로 Spark Cluster 를 실행시키는 방법에 대해서 알아보고자 합니다.
이러한 방식으로 Spark Master Node 와 여러개의 Worker Node 들을 구동시키는 방식을 Standalone Mode 라고 합니다.
이번 글에서는 Standalone 방식의 Deployment 를 설명하며,
Spark 클러스터 환경에서 여러가지 테스트를 진행하기 위해서 2개 이상의 Worker 를 실행시키는 것이 목표입니다.
Docker Yaml.
먼저 docker-compose.yaml 파일을 생성합니다.
저는 /tmp/ 디렉토리 하위에 해당 yaml 파일을 생성하였습니다.
이미지는 bitnami/spark:3.2.4 이미지를 사용합니다.
< spark-docker-compose.yaml >
cat <<EOF> /tmp/spark-docker-compose.yaml version: '2' services: spark: image: docker.io/bitnami/spark:3.2.4 container_name: master environment: - SPARK_MODE=master - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no - SPARK_USER=spark ports: - '8080:8080' - '7077:7077' volumes: - '/tmp/:/var/tmp/' spark-worker-1: image: docker.io/bitnami/spark:3.2.4 container_name: worker-1 environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://spark:7077 - SPARK_WORKER_MEMORY=1G - SPARK_WORKER_CORES=1 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no - SPARK_USER=spark spark-worker-2: image: docker.io/bitnami/spark:3.2.4 container_name: worker-2 environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://spark:7077 - SPARK_WORKER_MEMORY=1G - SPARK_WORKER_CORES=1 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no - SPARK_USER=spark EOF
< docker compose 실행 >
docker-compose -f /tmp/spark-docker-compose.yaml -p spark-cluster up -d
http://localhost:8080 주소를 통해서 웹 UI 로 접속가능합니다.
접속 후의 모습은 아래와 같습니다.
2개의 Worker 가 생성되어 있음을 확인할 수 있습니다.
리소스 설정하기.
Worker Node 의 리소스 설정.
Spark Worker Node 의 Core 와 메모리에 해당하는 리소스를 설정할 수 있습니다.
리소스 제한의 설정법은 환경변수를 활용합니다.
Core 의 설정을 위한 환경 변수는 SPARK_WORKER_CORE, 메모리의 설정을 위한 환경 변수는 SPARK_WORKER_MEMORY 입니다.
Core 설정은 2로 Memory 제한을 5Gb 로 적용해보도록 하겠습니다.
cat <<EOF> /tmp/spark-docker-compose.yaml version: '2' services: spark: image: docker.io/bitnami/spark:3.2.4 container_name: master environment: - SPARK_MODE=master - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no - SPARK_USER=spark ports: - '8080:8080' - '7077:7077' volumes: - '/tmp/:/var/tmp/' spark-worker-1: image: docker.io/bitnami/spark:3.2.4 container_name: worker-1 environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://spark:7077 - SPARK_WORKER_MEMORY=5G - SPARK_WORKER_CORES=2 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no - SPARK_USER=spark spark-worker-2: image: docker.io/bitnami/spark:3.2.4 container_name: worker-2 environment: - SPARK_MODE=worker - SPARK_MASTER_URL=spark://spark:7077 - SPARK_WORKER_MEMORY=5G - SPARK_WORKER_CORES=2 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no - SPARK_USER=spark EOF
위의 설정으로 실행된 Spark Cluster 의 결과는 아래의 Web UI 와 같습니다.
Cores in use 는 4 로 설정됩니다.
2 Cores 인 Worker Node 가 2개 실행되었기 때문이구요.
각 Worker Node 의 메모리는 5.0GiB 로 설정됩니다.
반응형'Spark' 카테고리의 다른 글
Helm 으로 Spark 구축하기 (0) 2023.12.15 Spark Driver Program 알아보기 (0) 2023.12.06 [Spark] SparkSQL CSV 파일 Aggregation 하기 (0) 2023.10.03 [Spark] Spark Lazy Evaluation 알아보기 (0) 2023.05.22 [Spark] RDD 로 숫자 처리하기 (0) 2023.01.19