ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spark] Docker 로 Spark Cluster 구현하기 ( Standalone Mode )
    Spark 2022. 7. 18. 04:40
    728x90
    반응형

     

    - 목차

     

    소개.

    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 로 설정됩니다.

     

     

     

     

     

    반응형
Designed by Tistory.