Spark job 설정 시 driver와 executor에 대한 설정 튜닝에 따라 성능이 달라진다.
Spark 동작 원리
- Spark는 하나의 driver와 여러 개의 worker 노드로 구성되어 동작한다.
driver에 대한 설정
--driver-memory
: driver는 전체 노드에서 한 개가 뜨며, driver가 사용하는 메모리 용량이다.
executor에 대한 설정
- executor마다 컨테이너로 감싸져 있다.
--num-executors
: 전체 노드에서 뜰 수 있는 executor 수의 최대값이다.
--executor-memory
: executor 하나가 사용하는 메모리 용량이다.
--executor-cores
: executor 하나가 사용하는 코어 개수이다.
성능 튜닝
- Spark는 인메모리 분산 처리 엔진이기 때문에 cores 수가 많은 것보다 memory 용량이 많은 게 더 좋다.
- 예를 들어, 3개의 데이터 노드가 있고, 노드 당 코어 수가 64개, 메모리 용량이 1024GB 라고 치자. (여기서 코어 수와 메모리 용량은 Available을 기준으로 한다.)
- 각 노드에서 최대로 뜰 수 있는 executor 개수는 A=64/(executor-cores)개이다.
- 노드마다 사용하는 메모리 용량은 A*(executor-memory)이다.
- 따라서 num-executors는 A*3으로 설정해야 자원을 최대로 활용한다.