'Development'에 해당되는 글 32건

 

Spark Components

 

  • Driver Program
    • main() 함수를 실행하고 SparkContext를 생성하는 프로세스

 

  • Cluster Manager

 

  • Worker Node
    • Executor: 실제 태스크를 수행하는 Worker Node의 프로세스
    • Cache: RDD를 Cache에 저장하여 이후 데이터 처리 속도를 향상 시킴

 

 

 

 

 

Spark Cluster Manager

 

 

 

  • Standalone
    • 기본으로 제공되는 Master Node (Supervise)
    • HA를 위해 Zookeeper를 이용할 수 있음

 

  • Hadoop YARN
    • Cluster Manager로 Hadoop의 YARN을 이용함
    • ‘--master yarn’ 옵션으로 job을 제출함
    • ApplicationMaster가 할당하는 컨테이너 내에서 Executor가 실행됨

 

  • Apache Mesos
    • Cluster Manager로 Apache Mesos (Marathon)를 이용함
    • Coarse-Grained 모드 (기본값): 1개의 Executor 당 다수의 Task를 처리함
      • 애플리케이션 통계로부터 Executor 수의 동적 Resize 지원
    • 기존 Fine-Grained 모드는 deprecated
  • Kubernetes (experimental)

Spark RDD

 

  • Motivation
    • MapReduce(MR)가 대량 데이터 처리를 조금은 손쉽게 해줌
    • 하지만 다음의 사항들에서 2% 부족함
      • 단순 Map/Reduce 외 복잡하고 Multi-Stage Job이 힘듦 (머신러닝, 그래프 처리 등)
      • Interactive, Ad-hoc 쿼리 등
    • 따라서 효율적인 Data Sharing 도구가 필요함
    • MR이 Iteration에서 느린 이유는 각 Iteration마다 스테이지 간 공유가 HDFS를 거치기 때문이므로 이러한 스테이지 간 공유를 RAM에서 해보자!

 

 

* 스테이지: 처리 단계를 나누는 논리적 단위

 

 

 

  • Problem
    • Fault-tolerant : RAM에서 처리하는 것은 좋으나 Fault를 어떻게 해결하느냐가 문제

 

 

  • Solution
    • GFS(HDFS)는 왜 그런 혁신을 일으켰는가?
      • Modify가 안되는 시스템
      • 무조건 쓰고 달리는 시스템
      • 단순하지만 Modify가 안되기 때문에 많은 것을 단순화 시킴
    • 그럼 RAM에서도 Read-only로 구성해볼까?
      • Resilient Distributed Datasets (RDD) 탄생
      • Immutable(불변성의, Read-only), Partitioned collections of records
      • Data -> RDD or RDD -> RDD 만 가능
    • 좋은 점
      • Immutable로 GFS처럼 Read-only만 가능한 단순한 구조 완성
      • 부모(가장 초기 RDD)로부터 계보(Lineage)만 기록해 놓아도 Fault-tolerant 보장

 

 

 

  • Coding
    • 코딩 과정으로 직접 계산이 이뤄지는 것이 아니라 Lineage를 쌓아감
    • 이를 통해 Directed acyclic graph (DAG)를 디자인함
    • 다양한 Transformations 구성 끝에 Action에서 실제 Lineage에 따른 명령들이 수행

 

 

  • Lazy-execution
    • Action이 수행되기 전까지 아무런 명령을 수행하지 않음
    • Lineage를 모두 작성한 후에 실행되기 때문에 Execution Plan 작성이 용이함
    • 따라서 자원이 배치된, 배치될 상황을 미리 고려해서 최적의 환경으로 Job을 수행할 수 있음
    • Transformation과 Action은 스파크 버전에 따라 업데이트되는 사항 확인 필요

 

 

  • Dependency
    • Narrow Dependency
      • 하나의 노드 내에서 모두 처리할 수 있는 작업
      • 네트워크를 통하지 않음
      • Fault 처리 역시 해당 노드 내에서 복구 가능
    • Wide Dependency
      • 다중 노드에 걸쳐야 작업을 처리 가능
      • 예를 들면 Shuffle이 일어나야 하는 작업
      • 네트워크를 통하며, Fault 복구 비용이 비쌈
      • 중요한 작업의 경우 Checkpoint도 고려 필요

 

 

Spark Stage

 

  • Stage는 네트워크 자원이 소요되는 작업 간의 구역을 나누는 단위
    • Stage 내에서 최적으로 작업이 수행될 수 있도록 DAG를 최적화함
    • 일반적으로 Map, Reduce 사이에 발생하는 Shuffle 과정이 해당됨

 

 

Spark Storage Level

 

  • 일반적으로 MEMORY_ONLY를 사용하며, Serialization을 위해서는 _SER가 붙은 Level을 이용하고, Replication을 위해서는 _2가 붙은 Level을 이용함

 

 

 

Level

Space Used

CPU Time

In memory

On disk

Nodes with data

MEMORY_ONLY

High

Low

Y

N

1

MEMORY_ONLY_2

High

Low

Y

N

2

MEMORY_ONLY_SER

Low

High

Y

N

1

MEMORY_ONLY_SER_2

Low

High

Y

N

2

MEMORY_AND_DISK

High

Medium

Some

Some

1

MEMORY_AND_DISK_2

High

Medium

Some

Some

2

MEMORY_AND_DISK_SER

Low

High

Some

Some

1

MEMORY_AND_DISK_SER_2

Low

High

Some

Some

2

DISK_ONLY

Low

High

N

Y

1

DISK_ONLY_2

Low

High

N

Y

2

 

 

 

* MEMORY_AND_DISK: 메모리 공간에 더이상 저장할 없는 경우 디스크에 저장

 

 

 

블로그 이미지

나뷜나뷜

,