Skip to main content

Command Palette

Search for a command to run...

Spark 완벽 가이드 18장 모니터링과 디버깅

Updated
3 min readView as Markdown

이전 스터디에서 공부했던 15장을 바탕으로 이 장에서는 어떤 부분을 모니터링하고 디버깅해야 하는지를 소개합니다.

모니터링과 디버깅

모니터링 범위

모니터링을 스파크가 사용하는 모든 자원에 걸쳐서 수행해야 정확한 오류 발생 지점을 찾아낼 수 있습니다.

  • 스파크 애플리케이션 잡

    • 디버깅을 위해서 스파크 모니터링 도구들을 가장 먼저 확인해야합니다.

    • 클러스터에서 실행되고 있는 애플리케이션의 RDD와 쿼리 실행 계획 같은 개념적 수준의 정보를 제공합니다.

    • 스파크 모니터링 도구 종류

      • 스파크 UI

      • 스파크 로그

  • JVM

    • 스파크의 Excutor들은 개별 JVM에서 실행됩니다.

    • 코드 실행과정을 이해하기 위해서서는 JVM의 도구를 사용해 모니터링해야합니다.

    • 이 중 일부 정보들은 스파크 UI에서도 확인이 가능하지만 저수준 디버깅이 필요할 때는 JVM 도구가 더 유용합니다.

    • JVM 도구 종류

      • jstack : 스택트레이스

      • jmap : 힙 덤프 생성

      • jstat : 시계열 통계 리포트 제공

      • jconsole : JVM 속성 변수들을 시각화

      • jvisualvm : 스파크 잡의 특성을 알아보는데 도움이 되는 도구

  • OS와 머신

    • JVM은 호스트 운영체제에서 실행되기 때문에 머신의 상태를 모니터링하는 것도 중요합니다.

    • CPU, Network, I/O 등의 자원에 대한 모니터링도 해야합니다.

    • 모니터링 도구 종류

      • dsta

      • iostat

      • iotop

  • 클러스터

    • 스파크 애플리케이션이 실행되는 클러스터

    • 클러스터 매니저 종류

      • YARN

      • Mesos

      • Spark standalone

    • 클러스터 모니터링 도구 종류

모니터링 대상

프로세스 (CPU, Memory 사용률 등)

  • 드라이버 프로세스

    • 스파크의 드라이버에는 모든 애플리케이션의 상태가 보관되어 있습니다.

    • 드라이버의 프로세스를 모니터링하면 애플리케이션이 안정적으로 실행중인지 확인할 수 있습니다.

  • 익스큐터 프로세스

    • 스파크에서는 Dropwizrd metrics library기반의 metric system을 갖추고 있습니다.

    • 메트릭 시스템

      • $SPARK_HOME/conf/metrics.properties 파일을 생성해 구성가능

      • 메트릭을 클러스터 모니터링 솔루션을 포함한 다양한 시스템으로 보낼 수 있다.

프로세스 내부의 쿼리 실행과정

  • 쿼리, Job, Stage, Task 각각의 정보를 확인 가능합니다.

스파크 로그

  • 로그레벨 (아래로 내려갈 수록 더 자세합니다.)

    • OFF

    • FATAL

    • ERROR

    • WARN

    • INFO

    • DEBUG

    • TRACE

    • ALL

  • 로그레벨 활성화하는 방법

      spark.sparkContext.setLogLevel("INFO")
    
  • 다른 로깅 프레임워크를 사용해도

  • 스파크 로그는 클러스터 매니저의 웹 UI로도 조회가 가능합니다.

  • 링크의 project template을 확인하시면 어떻게 사용하는지를 확인하실 수 있습니다.

스파크 UI

스파크 UI는 SparkContext 실행시 4040 포트로 기본 실행됩니다.
로컬모드를 사용중이시라면 http://localhost:4040 에 접속하시면 웹 UI를 이용할 수 있습니다.

  • 탭 구성은 다음 사진처럼 Job, Stages, Storage, Environment, Executors, SQL로 되어있습니다.

    • 이 중 SQL탭은 제가 확인해봤을 때는 sql 명령문을 실행한 후에 생성됐습니다.

  • 자세한 예제는 책을 참고해주세요.

스파크 UI 설정하기

스파크 REST API

스파크 UI 히스토리 서버

  • 이벤트 로그를 저장하도록 설정하면 이전 기록들도 로그를 기반으로 확인할 수 있습니다.

  • 마찬가지로 웹으로 확인이 가능하며 18080포트를 기본으로 사용합니다.
    http://localhost:18080

  • spark-defaults.conf에 정의된 spark.eventLog.enabled 속성을 true로 설정하시면 spark.evenLog.dir에 정의된 폴더로 이벤트 로그가 저장됩니다. (제 경우에는 설정 파일이 /usr/spark/conf에 저장되어 있었습니다.)

  • 아래 링크에 히스토리 서버 관련된 더 자세한 정보와 적용할 수 있는 설정들에 대해서 알아볼 수 있으므로 확인해보시길 바랍니다.
    히스토리 서버 문서

  • 만약 아래와 같은 에러가 뜬다면 /tmp/spark-events 폴더를 만들어주시면 됩니다.

디버깅 및 스파크 응급처치

  • 이 섹션은 사례들을 다루고 있으므로 책을 참고해주시면 좋을 것 같습니다.

More from this blog

오픈소스 기여모임 10기 후기 - 첫 Pr을 올리기까지

개발자라면 누구나 한 번쯤 오픈소스 기여에 대한 환상을 가져본 적 있을 거다. 하지만 막상 시작하려면 어디서부터 해야 할지 막막하고, 괜히 대단한 걸 해야 할 것 같은 부담감에 선뜻 시작하기는 어려운 것 같다. 나 또한 해보고 싶다는 마음만 가지고 계속 미뤄왔다. 그러다 2025년 말 쯤에 오픈채팅방과 글또 슬랙 채널에서 "오픈소스 기여모임" 10기 모집글을 봤다. 2년 넘게 500명 이상의 참가자와 함께 1000개 이상의 PR을 만들어온 커뮤...

Feb 5, 20265 min read

😢 글또 10기 활동 회고 — “글또야, 가지 마…”

들어가며 드디어 글또 10기 활동 회고를 정리해본다.6개월간의 여정을 뒤돌아보니 정말 많은 일들이 있었다. 글또라는 커뮤니티를 8기가 한창 진행되고 있을 때 알았는데 이름부터 인상이 강렬했다. "글쓰는 또라이가 세상을 바꾼다." 유쾌하고 독특한 문구에 피식 웃으며, '여긴 도대체 어떤 사람들이 모이는 곳이지?' 하고 넘겼었다. 재밌는 건 결국, 나도 그 "또라이들" 중 한 명이 되었다는 것이다. 😌 글또는 개발자들이 2주에 한 번 글을 ...

Jul 31, 20255 min read
😢 글또 10기 활동 회고 — “글또야, 가지 마…”

Serverless 환경에서 배포 전 환경변수 검증 자동화하기: TypeBox와 Bitbucket Pipeline 활용기

들어가며 배포 직후, 환경변수가 제대로 설정되지 않아 여러 API가 제대로 작동하지 않는 일이 있었습니다. 다행히 밤에 사용자가 없을 때 문제가 있었던 거라 영향도는 크지 않았지만 앞으로도 계속해서 발생할 수 있는 문제이기 때문에 해결해야 겠다고 생각했습니다. 개발 단계에서 문제가 발견되면 가장 좋겠지만, 현재 팀 상황에서는 백엔드 개발을 혼자 담당하고 있어 코드 리뷰나 검증 프로세스를 갖추기가 쉽지 않았습니다. 그래서 최소한 배포 전에 자동으...

Mar 16, 20254 min read

Cloudflare Tunnel로 포트포워딩 없이 홈서버 운영하기

이 글에서 다루는 내용 포트포워딩이 안 되는 이유 (CGNAT 환경 이해) CGNAT 우회 방법들의 장단점 비교 Cloudflare Tunnel 설정 방법 (MacOS 기준) 외부에서 내 PC로 접근할 수 있도록 허용하는 방법을 생각하면 포트포워딩이 가장 먼저 떠오릅니다. 공유기에서 특정 포트를 열어 외부에서 서버에 접속할 수 있도록 설정하는 방식으로, 마인크래프트 멀티를 해보셨던 분이라면 분명 해보셨을 방법입니다. 😊 작년에 저는 홈서...

Mar 2, 20256 min read
Cloudflare Tunnel로 포트포워딩 없이 홈서버 운영하기

구름고래 공방

48 posts