Spark?
- Hadoop과 유사한 클러스터 기반의 분산처리 기능을 제공하는 오픈소스 프레임워크
- 빅데이터 분산처리 플랫폼 / 엔진
- In-Memory기반으로 처리하기 때문에 반복적인 데이터 처리, 즉 ML 과 같은 것에 뛰어난 성능을 보인다.
Spark Application
- 제출한 Job을 Task로 변환하여 Executor에게 분산 처리함
Driver
- 스파크에서 Job을 수행하는 프로그램
- Main함수를 수행하는 프로그램
- SparkContext를 생성하고 해당 Instance를 포함한 프로그램
- Cluster모드에 따라 다른 위치에서 수행되지만 대체로 실행 서버에서 구동.
- Worker 노드에 작업을 시키고, 결과를 취합한다
Worker
- 작업을 하는 노드
Executor
가 동작하는 노드- 작업을 수행하는 프로세스
- Partition 단위로 Job을 수행
- 1개의 Worker 노드에 N개의 Executor가 동작할 수 있다
Application
- Spark 위에서 구동되는 프로그램
- Driver
- Spark Application을 실행하는 프로세스
- Spark Context를 생성
- Spark Application Life cycle 관리
- Executor
- Task 실행을 담당
- 실행 결과를 Driver에게 전달
- Driver
Cluster Manager
- 이름 그대로 cluster를 관리하는 매니져
- cluster mode 종류
- deploy mode
- client
- Driver Program을 submit한 곳에서 실행
- 즉 Client Server에서 Driver을 실행
- Driver Program을 submit한 곳에서 실행
- cluster
- Driver Program을 cluster중 무작위 실행
- 즉 Client Server이외의 worker Node에서 Driver을 실행
- Driver Program을 cluster중 무작위 실행
- client
Job
- Spark Application에 제출된 작업
- N개의 Task로 구성된 병렬 연산 단위
- Spark Application은 N+1개의 Job으로 구성됨
- 각 Job은 DAG로 변환된다
- Dag에서 각각의 Job Node들은 하나 이상의 Spark Stage에 포함됨
Stage
- N+1개의 Task의 집합
- 병렬/순차 적으로 수행될 수 있는 작업을 기반으로 생성됨
Task
- Executor에서 구동하는 최소 실행 단위
실행 순서
- 간단히 보면 위와 같은 방식으로 Job 1 안에 Stage들을 순차적으로 처리 완료 후 job 2를 수 행한다.
- 처리 순서
- SparkContext를 이용하여 RDD연산 정보를 DAG Scheduler에게 전달
- DAG를 생성하면, 해당 DAG를 Cluster Manager에게 전달
- 이때 Scheduler는 최대한 locality를 높여 stage를 구성
- 생성된 DAG를 수행
데이터 구조
- Spark_RDD
- DataFrame
- DataSet
사용 언어
- Java
- Scala
- R
- Python
HA
Spark 또한 Master - Slave 구성으로 되어 있기 때문에 HA구성을 만드는 것이 좋다
만약 HA구성을 하지 않으면 SPOF 위험이 생긴다.
구성 시 Zookeeper 등을 이용하여 사용한다
- 기본 설정
- SPARK_DAEMON_JAVA_OPTS에 아래 변수들을 추가한다
- spark.deploy.recoveryMode=ZOOKEEPER
- spark.deploy.zookeeper.url=
- spark.deploy.zookeeper.dir=
- 기본값 : /spark
- spark-env.sh에 아래와 같이 추가
- export SPARK_DAEMON_JAVA_OPTS=“-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url={zookeeper url} -Dspark.deploy.zookeeper.dir={zookeeper에서 저장할 경로}”
- SPARK_DAEMON_JAVA_OPTS에 아래 변수들을 추가한다
- HA구성 하지 않고 단일 복구 모드를 사용하고 싶다면 아래와 같이 하면된다
- spark-env.sh에 아래와 같이 추가
- export SPARK_DAEMON_JAVA_OPTS=“-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory={복구 데이터 경로}”
- spark-env.sh에 아래와 같이 추가
History Server
Spark의 동작을 확인할 수 있는 Web Server
- Event Log를 확인 할 수 있다
- HDSF를 사용한다면 아래와 같이 spark-defaults.conf 에 추가하여 후 start-history-server.sh를 실행하여 구동시켜 사용하면 된다.
spark.eventLog.enabled true // 이벤트로그 저장 여부
spark.eventLog.dir hdfs:///spark-history //이벤트 로그 저장
spark.history.fs.logDirectory hdfs:///spark-history // 종료된 App 로그 저장
보유 기능
- SparkStreaming
- SparkSQL
- SparkMLib
- SparkGraphx
[ Reference ]
개인적으로 공부한 내용 포스팅 중
잘못된 정보는 지적해주시면 좋겠습니다!
'프로그래밍 및 IT > Spark' 카테고리의 다른 글
spark-scheduling (0) | 2023.11.28 |
---|---|
WordCount (0) | 2023.10.13 |
RDD Action (0) | 2023.10.13 |
RDD Transformation (0) | 2023.10.13 |
Spark_RDD (0) | 2023.10.05 |