본문으로 이동
Spark Job 성능 모니터링과 최적화를 위한 Spark Analyzer 개발기
문서

Spark Job 성능 모니터링과 최적화를 위한 Spark Analyzer 개발기

김문수 · 토스 · 토스 기술 블로그

원본 보기

소개

Spark 작업이 효율적으로 실행되는지 모니터링하기 위해서 Spark Analyzer를 만든 경험을 공유하려고 합니다. 저희와 비슷한 고민을 가진 분들께 도움이 되길 바랍니다.

AI 핵심 요약

하루 6천 개가 넘는 Spark 작업을 일일이 확인하기 어려워 성능 저하를 자동으로 찾아내는 Spark Analyzer를 만들었습니다. DataFlint는 유용한 시각화 도구였지만 당시 REST API가 없어 자동화에 적합하지 않았고, 대신 Spark History Server API로 작업 이력을 수집해 메트릭을 직접 계산하기로 했습니다. 원본 데이터 수집과 성능 분석을 두 단계로 나누고 실행 주기를 시간 단위로 줄였으며, 파티션 불균형·작은 파일·디스크 스필을 기준과 임계치에 따라 감지해 해결 방법과 함께 알림을 보냈습니다. 그 결과 6천 개 이상의 작업에서 1천 개 이상의 잠재적 문제를 발견했으며, 앞으로는 알림 확대와 담당자 대상 JIRA 티켓 발행을 추진할 계획입니다.

  • Spark History Server REST API에서 애플리케이션 이력을 가져오면 별도 화면 파싱 없이 메트릭 수집을 자동화할 수 있습니다.
  • 원본 메트릭 수집과 분석 단계를 분리하면 History Server 호출을 반복하지 않고 분석 로직을 독립적으로 확장할 수 있습니다.
  • 파티션 스큐는 최대 작업 시간과 중앙값의 비율로 보되, 실제 영향이 작은 짧은 작업은 별도 조건으로 제외할 수 있습니다.
  • 작은 파일과 디스크 스필은 평균 파일 크기·파일 수, 스필 용량처럼 구체적인 지표와 임계치를 조합해 감지합니다.