🌭 모니터링 범위
- 스파크 애플리케이션과 잡
- 클러스터에서 애플리케이션이 실행되는 상황을 파악하거나 디버깅하려면 스파크 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
🚑 디버깅 및 스파크 응급 처치
- 스파크 애플리케이션이 시작되지 않는 경우
- 스파크 애플리케이션 실행 전에 오류가 발생한 경우
- 스파크 애플리케이션 실행 중 오류가 발생한 경우
- 느리거나 뒤처진 태스크
- 느린 집계 속도
- 느린 조인 속도
- 느린 읽기와 쓰기 속도
- 드라이버 OutOfMemoryError 또는 응답 없음
- 익스큐터 OutOfMemoryError 또는 응답 없음
- 의도하지 않은 null 값이 있는 결과 데이터
- 디스크 공간 없음 오류
- 직렬화 오류
[출처] 스파크 완벽 가이드 (빌 체임버스, 마테이 자하리아 지음)