Data Engineering/spark

Key Spark metrics and behavior patterns

quantapia 2018. 4. 20. 14:48

Spark application의 성능에 영향을 미치는 요소(infra 및 metirc)에 대한 깊은 이해가 필요하다. 모니터링에 필요한 것들을 좀 더 구체적으로 알아보자.

(아래 내용들이 기본적으로 spark ui에서 제공하는 것들.. 아마도 통합적으로 보여주라는 의미인듯?)


1. Memory관련 이슈가 가장 중요하게 신경써야 할 부분이다.

spark application을 개발할때 memory 사용량에 대한 고려가 되어야 하며, 모니터링에서는 각 component에서 cluster간의 GC와 메모리를 추적할 수 있어야 한다. GC가 과하게 발생하면 back pressure를 증가시킬 수 있다.


2. Shffule수행시에 성능 이슈.

가급적 shuffle과 reducing을 줄여서 Node간 데이터 이동을 최소화 하는 것이 좋으나, 가끔씩 반드시 필요할 때가 있다. 각 executor와 driver에서 발생하는 shuffle read/write를 추적하는 것이 좋다.


3. Spark application의 Latency를 추적.


4. Throughtput per sec or batinterval


5. Open된 File Descriptor의 갯수를 모니터링.

Suffle은 가끔 너무 많은 fie desriptor를 생성하여 "Too many open files" Exception을 발생시킴.


6. Stream mode에서 Sheduling delay를 모니터링

Scheduler에 의해서 job을 cluster에 제출하기 까지의 시간을 확인 (너무 많으면 스케줄 지연이 발생하므로 튜닝이 필요함.)

<모니터링 할 지표들>

■ Spark Driver (one driver for each application)

Block manager

•   MemoryUsed

•   MemoryRemaining


■ Scheduler

•   active jobs

•   total jobs


■ Streaming

•   # of receivers

•   # of completed batches

•   # of running batches

•   # of records received

•   # of records processed

•   #of unprocessed batches

•   average message processing time


■ Spark Executor (multiple executors for each application)

# of RDD blocks

•   MemoryUsed

•   Max Memory Allocated

•   Disk Used

# of Active Tasks

# of Failed Tasks

# of Completed Tasks


Total Duration for which the Executor has run 

Total Input Bytes

Total Shuffle Read Bytes

Total Shuffle Write Bytes


 Spark Master

# of Workers Alive in the Cluster

# of Apps Running and Waiting

# of Apps Waiting

# of Workers Provisioned in the Cluster


■ Spark Worker

# of Free Cores

# of Used Cores

# of Executors Currently Running

Memory Used / Free 


■ YARN

Application Manager


Launches

Registrations

Node Manager

Active Nodes

Lost Nodes

Unhealthy Nodes

Containers

Available GB

Available VCores

Containers Running

Containers Failed