18.1 모니터링 범위
스파크 애플리케이션과 잡
- 스파크 UI와 스파크 로그를 확인해야 함
JVM
- 스택 트레이스(stack trace)를 제공하는 jstack
- heap dum를 생성하는 jmap
- 다양한 JVM 속정 변수를 시각화된 방식으로 탐핵하는 jconsole
- 저수준 디버깅이 필요하다면 JVM 도구가 용이
OS와 머신
- JVM은 host OS에서 실해됨
- CPU, Network, I/O resource 를 모니터링
클러스터
- YARN, 메소스 등 스파크 애플리케이션이 실행되는 클러스터도 모니터링
18.2 모니터링 대상
[1] 드라이버와 익스큐터 프로세스
- 스파크 드라이버는 모든 애플리케이션의 상태가 보관되어 있음
- JVM 기반 애플리케이션의 메트릭을 수집/보고하는 Dropwizard Metrics Library 사용
- 주요 기능
- 게이지(Gauge): 현재 활성화된 작업의 수
- 카운터(Counter): 처리된 레코드 수
- 히스토그램(Histogram): 작업 실행 시간의 분포
- 타이머(Timer): 이벤트의 지속 시간 및 발생 빈도를 측정, 작업 완료 시간
- 미터(Meter): 이벤트 발생 속도를 측정, 초당 처리된 레코드 수
[2] 쿼리, 잡, 스테이지, 태스크
18.3 스파크 로그
- 파이썬은 자바기반 로깅 라이브러리 사용할 수 없어, logging & print 구문을 사용해야함
18.4 스파크 UI
- 모든 SparkContext는 실행시 애플리케이션 정보를 제공하는 Web UI를 4040포트로 기본 실행
18.5 디버깅 및 스파크 응급처치
스파크 애플리케이션이 시작되지 않는 경우
징후
- 스파크 잡이 시작되지 않음
- 클러스터의 노드 정보를 전혀 표시하지 않음
대응
- 드라이버와 익스큐터 간의 통신이 제대로 이루어 지지 않는 경우 ( IP, PORT 방화벽 )
- 스파크 드라이버 및 클러스터에 적정한 자원을 할당할 수 없는 경우
스파크 애플리케이션 실행 중에 오류가 발생한 경우
징후
- 하나의 잡은 성공하지만 다음 잡은 실패
- 어제 정상 동작한 예약 작업이 오늘은 실패
대응
- 데이터가 존재하는지 올바른 포맷인지 확인
- 데이터의 스키마 확인
느리거나 뒤처진 태스크
징후
- 애플리케이션 머신 수를 늘려도 상황이 개선되지 않고 특정 태스크가 오래 실행 됨
대응
- DF, RDD 파티션에 데이터가 균등하게 분할되지 않은 경우
- 파티션 수 증가
- null값을 먼저 필터링
- 사용자 정의함수 UDF가 적당한 크기의 데이터를 사용하는지 확인
느린 조인 속도
대응
- 조인 순서를 변경하면서 잡의 처리속도가 올라가는지 테스트
- 데이터 치우침 현상 확인
- 작은 테이블의 브로드캐스트
디스크 공간 없음 오류
징후
- no space left on disk 오류
대응
- 더 많은 디스크 공간 확보
- 데이터 파티션을 재분배
- 외부 저장소 추가
- aws glue의 경우 DPU 증가
'DataPipeline > Spark' 카테고리의 다른 글
| 스파크완벽가이드 - 21장 구조적 스트리밍의 기초 (0) | 2024.08.18 |
|---|---|
| 스파크완벽가이드 - 20장 스트림 처리의 기초 (0) | 2024.08.18 |
| 스파크완벽가이드 - 17장 스파크 배포환경 (0) | 2024.08.18 |
| 스파크완벽가이드 - 16장 스파크 애플리케이션 개발하기 (0) | 2024.08.18 |
| 스파크완벽가이드 - 15장 클러스터에서 스파크 실행 (0) | 2024.08.18 |