SparkStreaming에 JMX를 연결하여 조사하기

SparkStreaming에서 발생한 문제를 조사하기 위해 JMX를 활성화하고 연결하는 절차를 설명합니다.

Spark executor에서 JMX 사용



Java 어플리케이션으로 JMX를 유효하게 할 때에는 -Dcom.sun.management.jmxremote.port 옵션으로 임의의 포트 번호를 지정한다고 생각합니다만
Spark 어플리케이션의 경우, 한 대의 서버로 복수의 executor가 일어나는 경우가 있어 포트 번호가 중복했을 경우에 나중에 기동한 executor가 모두 에러 종료합니다.
값을 0으로 하면 비어 있는 포트 번호를 적당히 선택해 사용하게 되므로, 그렇게 설정해 spark-sumit를 실시합니다.
spark2-submit \
    --master yarn \
    --conf "spark.executor.extraJavaOptions= \
        -Dcom.sun.management.jmxremote \
        -Dcom.sun.management.jmxremote.port=0 \
        -Dcom.sun.management.jmxremote.authenticate=false \
        -Dcom.sun.management.jmxremote.ssl=false"
    --class SparkApp \
    sparkApp.jar

덧붙여서 driver의 조사를 실시하고 싶은 경우는 spark.driver.extraJavaOptions 에 같은 옵션을 건네주면 JMX를 유효화할 수 있습니다.

JMX 연결



Spark 애플리케이션을 실행하는 서버를 공개합니다.



Spark는 클러스터에서 실행되므로 실행 중인 서버가 항상 동일하지는 않습니다.
여러가지 방법이 있다고 생각합니다만 나는 Spark의 WEB UI상에서 executor 탭을 열어 조사하는 경우가 많습니다.

executor가 바인드하는 포트를 검사합니다.



무작위로 할당되므로 실행 중인 서버에 위에서 JVM이 바인딩된 포트 목록을 표시합니다.
lsof와 grep 등을 구사하면 낼 수 있다고 생각합니다.

JMX 클라이언트 연결



JMX 클라이언트는 여러 가지가 있지만 이번에는 Java에 표준으로 따라오는 Java VisualVM을 선택했습니다.

패스가 다니면 아래에서 시작할 수 있다고 생각합니다.
jvisualvm &



실행 중인 SparkStreaming을 조사하고 힙 덤프를 수행할 수 있었습니다.
(이미지는 이미지입니다)

참고 자료



htps : // / cs. 오라 cぇ. 코 m/쟈ゔぁせ/jp/1.5.0/구이데/마나게멘 t/아겐 t. HTML
h tps : // s t c ゔ ぇ rf ぉ w. 코m/쿠에 s치온 s/45435237

좋은 웹페이지 즐겨찾기