[Apache Spark] 모니터링과 디버깅

연수·2021년 12월 10일
0

spark

목록 보기
22/26

🌭 모니터링 범위

  • 스파크 애플리케이션과 잡
    • 클러스터에서 애플리케이션이 실행되는 상황을 파악하거나 디버깅하려면 스파크 UI와 스파크 로그를 확인해야 한다.
    • 스파크 UI와 스파크 로그는 RDD와 쿼리 실행 계확과 같은 개념적 수준의 정보를 제공한다.
  • JVM
    • 스파크는 모든 익스큐터를 개별 JVM에서 실행하므로 코드가 실행되는 과정을 이해하기 위해 각 가상 머신을 모니터링해야 한다.
    • 일부 정보는 스파크 UI에서도 확인할 수 있지만, 저수준 디버깅이 필요하다면 JVM 도구가 더 유용하다.
  • OS와 머신
    • JVM은 호스트 운영 시스템(OS)에서 실행되므로 머신의 상태를 모니터링해 정상 작동 중인지 확인하는 것이 중요하다.
    • CPU, 네트워크, I/O 자원에 대한 모니터링 필요 → 클러스터 수준 모니터링 솔루션에서 확인할 수 있다.
  • 클러스터
    • YARN, 메소스, 스탠드얼론 클러스터 매니저가 모니터링 대상
    • 모니터링 솔루션(강글리아, 프로메테우스 등)을 활용하면 클러스터가 동작하지 않는 상황을 빠르게 알 수 있다.

 

🕶️ 모니터링 대상

👉 드라이버와 익스큐터 프로세스

  • 드라이버는 모든 애플리케이션의 상태가 보관되어 있으며, 안정적으로 실행 중인지 확인할 수 있다.
  • 익스큐터의 상태 파악 또한 중요하다.
  • 스파크는 수월한 모니터링을 지원하기 위해 드롭위자드 메트릭 라이브러리 기반의 메트릭 시스템을 갖추고 있다.

 

👉 쿼리, 잡, 스테이지, 태스크

  • 스파크는 쿼리, 잡, 스테이지, 태스크의 개념을 가지고 있으며 각각의 정보도 확인할 수 있다.
  • 클러스터에서 특정 시점에 실행되는 작업을 파악할 수 있으며 성능 개선이나 디버깅 시 매우 유용하다.

 

🪵 스파크 로그

  • 가장 상세하게 모니터링 하는 방법 중 하나
  • 잡의 실패 지점이나 원인을 파악하는 데 도움이 된다.
  • 파이썬은 logging 모듈 또는 print 구문을 사용해 표준 오류로 결과를 출력해야 한다.

 

🥭 스파크 UI

  • 실행 중인 애플리케이션과 스파크 워크로드에 대한 평가지표를 모니터링할 수 있는 화면을 제공한다.
  • 모든 SparkContext는 실행 시 애플리케이션과 관련된 유용한 정보를 제공하는 웹 UI를 4040 포트로 기본 실행한다.
  • 다수 애플리케이션을 실행하는 경우 스파크는 순차적으로 포트 번호를 증가시켜 웹 UI를 제공한다. (4041, 4042 ...)
  • 스파크 UI의 탭에서 모니터링하려는 항목에 접근할 수 있다.
    • Jobs, Stages, Storage(RDD, DataFrame, 캐시된 데이터 관련 정보), Environment(스파크 속성, 스칼라나 자바 관련 정보, 런타임 환경 관련 정보), Executors, SQL

 

🚑 디버깅 및 스파크 응급 처치

  1. 스파크 애플리케이션이 시작되지 않는 경우
  2. 스파크 애플리케이션 실행 전에 오류가 발생한 경우
  3. 스파크 애플리케이션 실행 중 오류가 발생한 경우
  4. 느리거나 뒤처진 태스크
  5. 느린 집계 속도
  6. 느린 조인 속도
  7. 느린 읽기와 쓰기 속도
  8. 드라이버 OutOfMemoryError 또는 응답 없음
  9. 익스큐터 OutOfMemoryError 또는 응답 없음
  10. 의도하지 않은 null 값이 있는 결과 데이터
  11. 디스크 공간 없음 오류
  12. 직렬화 오류

 

[출처] 스파크 완벽 가이드 (빌 체임버스, 마테이 자하리아 지음)

profile
DCDI

0개의 댓글