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