1. 스파크 어플리케이
스파크는 빅데이터 처리를 위한 오픈소스 분산 처리 시스템이다.
스파크는 크게보면 스파크 어플리케이션과 클러스터 매니저로 구성된다.
스파크 어플리케이션은 Spark Driver (Driver Process)와 Executor로 구성된다.
1개의 스파크 어플리케이션에는 1개의 Spark Driver와 N개의 Executor로 구성된다.
- Spark Driver (Master Node)
한개의 노드에서 실행되며 main함수 실행.
사용자 프로그램을 task 단위로 변환하여 Executor로 전달.
- Executor (Worker Node)
다수의 worker 노드에서 실행되는 프로세스.
Spark Driver가 할당한 task를 수행하여 결과를 반환.
스파크 어플리케이션 실행과정
1. 사용자가 spark-submit 을 통해 어플리케이션 제출
2. Spark Driver가 main 함수 실행, SparkContext 생성
3. SparkContext가 Cluster Manger과 연결
4. Spark Driver가 Cluster Manager에게 Executor 실행을 위한 리소스 요청, Executor 할당 받음.
5. Spark Context가 작업 내용을 task 단위로 분할하여 Executor로 전송
6. Executor은 작업을 수행하고, 결과를 제출
2. 분산 처리 시스템
여러 개의 독립적인 컴퓨터(노드)가 협력하여 하나의 작업을 수행하는 시스템. 각 컴퓨터는 서로 다른 위치에 있을 수 있으며, 네트워크를 통해 연결되어 데이터를 처리하고 작업을 분담
3. 클러스터
여러 대의 컴퓨터(일반적으로 서버)가 동일한 네트워크 내에서 협력하여 하나의 시스템처럼 동작하는 컴퓨팅 환경이다. 클러스터는 주로 고가용성, 고성능 컴퓨팅(HPC), 부하 분산을 위해 사용한다.
클러스터 내의 각 노드는 독립적인 CPU, 메모리, 디스크를 가지고 있으며, 네트워크를 통해 서로 통신한다.
Spark 작업이 클러스터에서 실행된다는 의미
- 분산 작업 수행: Spark 작업이 클러스터에서 실행된다는 것은, 데이터 처리나 계산 작업이 클러스터에 있는 여러 노드에 분산되어 동시에 병렬로 수행된다는 뜻. 예를 들어, 대규모 데이터셋을 처리하는 작업이 있을 때, 이 데이터를 여러 조각으로 나누어 각 워커 노드가 자신의 조각을 처리.
- 리소스 분배: 마스터 노드는 클러스터의 모든 자원(CPU, 메모리 등)을 관리하며, 작업이 효율적으로 수행되도록 자원을 분배한다. 작업을 수행할 때 필요한 자원을 클러스터 내의 각 워커 노드에 할당하고, 작업의 진행 상황 모니터링.
분산처리 vs 클러스터
분산처리 시스템이 더 넓은 개념으로, 클러스터는 분산처리 시스템의 한 형태이다.
분산처리 시스템은 노드들이 서로 다른 위치에 있을 수 있지만, 클러스터는 동일하거나 가까운 위치의 노드로 구성된다.
장점
1. 여러 노드에서 병렬로 작업이 수행되기 때문에 처리 속도가 빠르다
2. 데이터나 작업량이 늘어날 때, 클러스터에 새로운 노드를 추가함으로써 처리 능력을 쉽게 확장가능하다
3. 한 노드에 장애가 발생하더라도 다른 노드가 작업을 이어받아 처리할 수 있으므로 시스템이 안정적으로 운영
4. 클러스터 핵심 컴포넌트
1) Node : 클러스터를 구성하는 개별 컴퓨터 또는 서버
각 노드는 클러스터 내에서 독립적으로 작업을 수행할 수 있지만, 전체적으로 하나의 시스템처럼 협력하여 작업을 처리한다. 클러스터의 노드들은 네트워크를 통해 서로 연결되어 있으며, 자원을 공유하거나 서로의 작업을 지원한다.
- 마스터 노드 : 클러스터를 관리하고 조정하는 중앙 제어 장치 역할 (DAG)
클러스터의 중앙 제어 장치로, 작업을 스케줄링하고 Worker 노드에 작업을 분배하는 역할.
사용자로부터 실행할 작업 을 받아 여러 Task로 분할한다. 모니터링하면서 작업이 실패할 시 다시 실행하도록 조정.
- Driver Process : 애플리케이션을 실행하는 메인 프로세스.
사용자가 작성한 애플리케이션 코드를 실행하여 데이터 처리 작업을 정의하고, 클러스터에 작업을 분배하는 역할을 한다.합니다. 코드를 실행하고 작업을 생성하여 클러스터 매니저에게 제출.
- Spark Context : Driver Process 내에서 생성되며, 클러스터와 스파크 애플리케이션의 연결을 관리하는 객체.
- 워커 노드 : 마스터 노드의 지시에 따라 실제 작업을 수행하는 역할 (Operator)
실제로 데이터를 처리하고 계산 작업을 수행하는 노드.
마스터로부터 받은 Task를 실행하고 데이터 처리 결과 저장하고 마스터에게 보고.
각 워커는 1개 이상의 Executor 프로세스를 실행하며, Executor가 Task를 수행하고 메모리 및 디스크를 관리
CPU, 메모리 같은 리소스를 사용하여 작업을 병렬로 수행한다.
- 마스터 노드로부터 할당된 작업 실행
- Core, Memory 클러스터 매니저에게 할당 받음
2) Cluster Manager : 클러스터의 리소스 (CPU, 메모리 등)을 관리, 작업을 조정하는 소프트웨어
Spark Driver (Driver Process)가 요청한 작업에 필요한 자원 할당, 워커 노드 관리.
3) Load Balancer : 클러스터로 들어오는 트래픽을 여러 노드에 균등하게 분배하여 과부하를 방지하는 장치 (ex - NGINX)
4) Network : 클러스터를 구성하는 모든 노드들을 연결하는 물리적 또는 논리적 통신 인프라
5) Distributed Storage : 클러스터 내의 데이터가 여러 노드에 분산되어 저장되는 시스템
- HDFS (Hadoop Distributed File System): 데이터를 여러 노드에 블록 단위로 분산 저장하여 고가용성(시스템이 지속적으로 안정적으로 작동할 수 있도록 보장)과 고성능을 제공하는 파일 시스템.
6) Job Scheduler : 클러스터 내에서 수행될 작업을 관리하고, 작업의 우선순위를 설정하며, 작업을 각 노드에 할당하는 역할을 하는 소프트웨어
5. Spark Standalone Mode
클러스터가 아닌 단일 컴퓨터에서 스파크 전체를 동작시키는 방식.
Spark Driver과 Executor은 각각 thread로 동작하며, Executor은 Worker 노드 하나당 한개씩만 동작한다.
마스터 / 워커 노드 실행
$ cd $SPARK_HOME
$ sbin/start-master.sh
$ sbin/start-worker.sh <master URL>
포트 따로 지정해주거나, 워커 노드가 사용할 리소스(CPU와 메모리)를 설정하여 실행
sudo apt install net-tools
ifconfig -a
$ sbin/start-master.sh -h <inet> --webui-port <포트번호>
$ sbin/start-worker.sh <master URL> -c <코어 수> -m <메모리 용량>
참고 : https://imhamburger.tistory.com/61
스파크(Spark) - 분산 처리 시스템 구조 이해하기
지난글에서 스파크가 뭔지?에 대해 설명하였다. 스파크는 빅데이터 처리를 위한 오픈 소스 분산 처리 시스템이다.그리고 분산 처리를 하기위해 스파크에서 중요한 역할을 하는 두 가지 핵심 컴
imhamburger.tistory.com
https://artist-developer.tistory.com/8
[Spark] 스파크 구조 및 실행 과정
스파크는 크게 보면 스파크 어플리케이션과 클러스터 매니저로 구성되어 있다. 스파크 어플리케이션은 실제 일을 수행하는 역할을 담당하며, 클러스터 매니저는 스파크 어플리케이션 사이에
artist-developer.tistory.com
'Data Engineering > Spark' 카테고리의 다른 글
[SPARK] json형식 pyspark 에서 파싱하기 (0) | 2024.08.28 |
---|---|
[SPARK] spark-submit option (total-executor-cores , num-executors) (0) | 2024.08.16 |
spark, 분산처리, 배치처리 개념 / spark, zeppline, java 설치 (0) | 2024.08.14 |