Spark의 메모리에 관해서

스파크는 Task가 수행하는데 있어서 모든 계산이 메모리 내에서 발생하는 메모리 내 처리 엔진

→ 데이터 처리하는데 persist하는게 아닌 cached

따라서 스파크 메모리 관리는 매우 중요하다

커밋할 때 메모리 할당이 너무 크면 리소스를 많이 차지하고, 메모리 할당량이 너무 적으면 메모리 오버플로 및 전체 GC 문제가 쉽게 발생

Spark Application에는 Driver와 Executor라는 두가 JVM 프로세스가 포함되어 있습니다.

Driver의 메모리 관리는 비교적 간단하며, Spark는 구체적인 계획을 세우지 않습니다. 이번 포스팅에서는 Executor 메모리 관리에 대해 알아봅니다.

Executor는 Worker 노드에서 실행되는 JVM 프로세스 역할을 합니다. 따라서 JVM 메모리 관리를 이해하는 것이 중요합니다.

JVM 메모리 관리는 두가지로 나눌 수 있습니다.

  1. On-Heap Memory Managment (In-Memory) : Object는 JVM heap에 할당되고 GC에 의해 바인딩됩니다.
  2. Off-Heap Memory Managment (External-Memory) : Object는 직렬화에 의해 JVM 외부의 메모리에 할당되고 Application에 의해 관리되며 GC에 바인딩되지 않습니다.

일반적으로 Object의 읽기 및 쓰기 속도는 ( On-Heap > Off-Heap  > DISK) 순입니다.

메모리 관리의 종류