Tools/Spark

Spark 클러스터 환경 구성과 실행

칼쵸쵸 2024. 2. 19. 21:46

 

스파크의 실행 모드

로컬 모드 (Local Mode)

  • 설명: Spark 로컬 모드는 단일 기계에서 Spark 애플리케이션을 실행하기 위한 모드입니다. 개발이나 테스트 목적으로 주로 사용되며, 클러스터 환경이 필요 없습니다.
  • 사용 케이스: 소규모 데이터셋 처리, 코드 테스트, 알고리즘 개발 등.
  • 설정: Spark를 설치한 후, Spark 애플리케이션을 실행할 때 마스터 URL로 local 또는 local[*]을 사용하여 로컬 모드로 실행할 수 있습니다. 여기서 [*]는 사용 가능한 모든 코어를 사용하겠다는 의미입니다.
  •  
# Spark Shell을 로컬 모드로 시작
$ ./bin/spark-shell --master local[4]

독립 실행형 모드 (Standalone Mode)

  • 설명: Spark의 독립 실행형 모드는 Spark 자체에 내장된 클러스터 매니저를 사용하여 클러스터 환경에서 Spark 애플리케이션을 실행합니다. 이 모드는 별도의 외부 클러스터 매니저 없이도 작동합니다.
  • 사용 케이스: 중소규모 데이터 처리, Spark를 주로 사용하는 환경에서의 데이터 처리 작업.
  • 설정: Spark 클러스터를 구성한 후, 마스터 노드의 URL을 사용하여 Spark 애플리케이션을 실행합니다. 마스터 URL은 spark://<마스터노드의IP>:<포트> 형식을 가집니다.
# Spark 애플리케이션을 독립 실행형 클러스터에서 실행
$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
    --master spark://master:7077 \
    --executor-memory 2G \
    --total-executor-cores 4 \
    /path/to/examples.jar \
    1000

YARN 모드 (Yet Another Resource Negotiator Mode)

  • 설명: YARN 모드에서는 Spark가 Hadoop 클러스터 위에서 실행됩니다. YARN은 Hadoop 2.x 버전에서 도입된 리소스 매니저로, 다양한 데이터 처리 프레임워크를 위한 통합된 리소스 관리 및 잡 스케줄링을 제공합니다.
  • 사용 케이스: 대규모 데이터셋 처리, Hadoop 생태계와의 통합이 필요한 경우.
  • 설정: Hadoop YARN 클러스터가 설정되어 있어야 합니다. Spark 애플리케이션을 실행할 때 --master yarn 옵션을 사용하여 YARN 모드로 실행할 수 있습니다. 추가적으로, YARN 클러스터에서 리소스 할당 및 관리를 위한 설정을 조정할 수 있습니다.
# Spark 애플리케이션을 YARN 클러스터 모드로 실행
$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode cluster \
    --executor-memory 2G \
    --num-executors 3 \
    /path/to/examples.jar \
    1000

 

 

독립 실행 모드로 다중 노드 클러스터 스파크 설정( CentOS 기준)

마스터1 슬레이브3로 구성

4대 노드 모두 아래와 같이 구성

스파크 다운로드 , 설정

스파크 다운로드 3.2.1 버전

wget https://downloads.apache.org/spark/spark-3.2.1/spark-3.2.1-bin-hadoop2.7.tgz

 

압축풀고 spark로 디렉토리 이동

tar xvf spark-3.2.1-bin-hadoop2.7.tgz
mv spark-3.2.1-bin-hadoop2.7 spark

 

 

spark home 설정

export SPARK_HOME=/home1/irteam/spark
export PATH=$SPARK_HOME/bin:$PATH

java와 python 또한 home 지정이 되어있어야 한다.

 

아래 명령어와 pyspark가 정상 실행되어야함

spark-submit --class org.apache.spark.examples.SparkPi --master local $SPARK_HOME/examples/jars/spark-examples*.jar 100

 

결과

Pi is roughly 3.1414479141447913

 

pyspark가 실행된다면 해당 노드의 4040 포트에서 web UI가 동작

 

 

네트워크 설정

/etc/hosts 

MasterIP MasterHostName
Slave1IP Slave1HostName
Slave12P Slave3HostName
Slave13P Slave2HostName

 

ssh 설정

key-gen 생성 및 복사

ssh-keygen
cat ~/.ssh/id_rsa.pub

 

.ssh/authorized_keys

에 아래와 같이 입력

ssh-rsa MASTER_SSH_KEY MASTER_HOST_NAME
ssh-rsa SLAVE1_SSH_KEY SLAVE1_HOST_NAME
ssh-rsa SLAVE2_SSH_KEY SLAVE2_HOST_NAME
ssh-rsa SLAVE3_SSH_KEY SLAVE3_HOST_NAME

 

클러스터 실행

클러스터에 4개 노드가 있다면, 마스터 노드와 3개의 워커(슬레이브) 노드에서 각각 설정을 조정

마스터 노드 설정

마스터 노드에서는 Spark 클러스터의 마스터 주소를 설정. 이 설정은 클러스터를 초기화하고 워커 노드와의 통신을 관리

# spark-defaults.conf
spark.master                     spark://[마스터_노드_IP]:7077

 

모든 노드 공통 설정

모든 노드에서 공통적으로 설정해야 할 옵션들이 있습니다. 예를 들어, 로깅 레벨, 메모리 설정, 실행할 애플리케이션의 최대 허용 크기 등을 설정할 수 있습니다. 다음은 spark-defaults.conf 파일에 추가할 수 있는 몇 가지 일반적인 설정 예시입니다:

# 로깅 레벨 설정
spark.eventLog.enabled           true
spark.eventLog.dir               로그 파일 경로

# 메모리 및 코어 설정
spark.executor.memory            4g
spark.executor.cores             4
spark.cores.max                  16

# 애플리케이션 UI 포트 (선택적)
spark.ui.port                    4040
  • spark.eventLog.enabled와 spark.eventLog.dir는 Spark 이벤트 로깅을 활성화하고, 로그 파일을 저장할 위치를 지정합니다.
  • spark.executor.memory와 spark.executor.cores는 각 실행자에 할당된 메모리와 코어 수를 설정합니다.
  • spark.cores.max는 클러스터에서 사용할 수 있는 최대 코어 수를 제한합니다.
  • spark.ui.port는 Spark 애플리케이션의 Web UI에 접근하기 위한 포트를 설정합니다. 이 설정은 마스터 노드에 특히 유용할 수 있습니다.

 

마스터 노드 실행

$SPARK_HOME/sbin/start-master.sh

 

정상실행되면 master ui가 8080 포트에서 실행

 

워커 노드 실행

$SPARK_HOME/sbin/start-worker.sh spark://마스터 노드 주소:7077

 

정상 실행되면 워커 ui가 8081에서 실행

spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://마스터노드_호스트_네임:7077 \
  --deploy-mode cluster \
  --driver-memory 512m \
  --executor-memory 512m \
  --executor-cores 1 \
  $SPARK_HOME/examples/jars/spark-examples*.jar \
  100

 

 

정상 실행되었다면 

completed Drivers > finished Drivers의 stdout 안에

위와 같이 출력됨

 

SPARK UI 종류

Apache Spark 독립 실행형 클러스터 모드에서 마스터 노드와 워커 노드는 각각 다른 역할을 하며, 이에 따라 각 노드에서 제공하는 웹 UI도 서로 다른 정보와 기능을 제공합니다. 기본적으로 마스터 노드의 웹 UI는 8080 포트에서, 워커 노드의 웹 UI는 8081 포트에서 접근할 수 있습니다. 이러한 포트 번호는 Spark의 설정에 따라 변경될 수 있습니다.

마스터 노드의 웹 UI (포트 8080)

마스터 노드의 웹 UI는 클러스터 전체의 상태와 관련된 정보를 제공합니다. 여기에는 다음과 같은 정보가 포함됩니다:

  • 클러스터 개요: 클러스터의 마스터 URL, 애플리케이션 목록, 클러스터 내의 워커 노드 개수 및 상태 정보입니다.
  • 애플리케이션 목록: 현재 실행 중이거나 이전에 실행된 Spark 애플리케이션의 목록과 상태(예: 실행 중, 완료, 실패)입니다.
  • 워커 노드 목록: 클러스터에 속한 각 워커 노드의 상태, 사용 가능한 코어와 메모리 자원, 실행 중인 애플리케이션에 할당된 자원 등의 정보입니다.
  • 시스템 상태: CPU 사용률, 메모리 사용량 등 클러스터 전체의 시스템 상태에 대한 정보입니다.

워커 노드의 웹 UI (포트 8081)

워커 노드의 웹 UI는 해당 워커 노드에 특화된 상세 정보를 제공합니다. 여기에는 다음과 같은 정보가 포함됩니다:

  • 노드 정보: 워커 노드의 ID, 호스트명, 포트 번호 등의 기본 정보입니다.
  • 자원 정보: 노드에 할당된 총 메모리와 코어 수, 현재 사용 중인 자원량, 사용 가능한 자원량 등입니다.
  • 실행 중인 애플리케이션: 해당 워커 노드에서 실행 중인 애플리케이션의 목록과 각 애플리케이션에 할당된 자원, 상태 등의 상세 정보입니다.
  • 로그: 워커 노드의 로그 파일에 대한 링크가 제공되며, 이를 통해 문제를 진단하거나 시스템의 동작 상태를 확인할 수 있습니다.

마스터 노드의 UI는 클러스터의 관리 및 모니터링에 초점을 맞추고 있으며, 워커 노드의 UI는 개별 노드의 세부적인 상태와 로그 정보에 더 집중되어 있습니다. 이를 통해 사용자는 클러스터의 전반적인 상태와 개별 노드의 세부 정보를 모두 파악할 수 있습니다.

 

 

Spark 애플리케이션 UI (404x)

Apache Spark에서 404x 포트는 기본적으로 Spark 애플리케이션의 드라이버 프로그램에 의해 사용되는 웹 UI 포트입니다. 이 웹 UI는 현재 실행 중인 Spark 애플리케이션의 상세한 정보와 메트릭스, 로그 등을 제공합니다. 애플리케이션 레벨에서의 진단, 모니터링 및 성능 분석을 위해 사용됩니다.

Spark 애플리케이션 웹 UI (포트 404x)가 제공하는 정보:

  • Jobs: 현재 실행 중이거나 완료된 작업의 목록과 상태, 각 작업의 스테이지 분할 및 세부 실행 시간 등의 정보를 제공합니다.
  • Stages: 애플리케이션의 모든 스테이지와 각 스테이지의 작업, 태스크 수행 시간, 읽기 및 쓰기 작업에 대한 세부 정보 등을 보여줍니다.
  • Storage: 애플리케이션에서 사용하는 RDDs(Resilient Distributed Datasets)의 저장 상태, 메모리 사용량, 디스크 사용량 등을 확인할 수 있습니다.
  • Environment: 실행 중인 Spark 애플리케이션의 환경 설정, Spark 버전, Java 버전 등의 정보와 함께, 애플리케이션 구성과 관련된 세부 정보를 제공합니다.
  • Executors: 애플리케이션의 실행자 정보, 각 실행자에 할당된 태스크, 메모리 사용량, CPU 사용 시간 등을 보여줍니다.
  • SQL Queries: Spark SQL을 사용하는 애플리케이션의 경우, 실행된 SQL 쿼리와 쿼리 실행 플랜, 성능 메트릭스 등을 확인할 수 있습니다.

'Tools > Spark' 카테고리의 다른 글

RDD의 생성과 데이터 처리  (1) 2024.03.11
스파크 클러스터 동작방식  (0) 2024.03.07
빅데이터, 하둡 및 Spark 소개  (0) 2024.02.18
Apache Spark 설정 및 튜닝  (0) 2023.10.17
Spark와 RDD  (0) 2023.08.18