YARN에서 움직이는 Spark에서 GC 로그를 얻는 방법

Java의 어플리케이션으로 GC 관련의 조사를 실시할 때는, GC 로그를 토출시켜 로그를 GC Viewer등으로 분석한다고 생각합니다.
다만 분산 처리 환경의 yarn에서는 실행 환경이 분산되어 있는 관계상 설정 방법에 조금 버릇이 있습니다.
이번에는 YARN에서 실행되는 Spark에서 구체적인 GC 로그를 얻는 방법에 대해 설명합니다.

스파크가 GC 로그를 출력하도록



spark-submit을 할 때 쓰기 옵션을 전달하여 executor의 JVM이 GC 로그를 출력하도록 할 수 있습니다.
driver의 경우도 비슷한 느낌으로 전달할 수 있습니다.
spark2-submit \
    --conf "spark.executor.extraJavaOptions=-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \
    --class ExampleSparkMain \
    ExampleSpark.jar

Spark executor의 표준 출력 얻기



GC 로그는 executor의 표준 출력으로 출력됩니다.yarn.log-aggregation-enable가 활성화되면
Spark를 실행하는 노드의 로컬로 출력됩니다 (Spark Web UI에서 액세스 할 수도 있음).

로컬로의 출력 디렉토리입니다만 yarn 의 yarn.nodemanager.log-dirs 라고 하는 값으로 설정이 행해지고 있으므로 이하의 방법으로 확인을 실시합니다.
  • yarn-site.yml 보기
  • hdfs getconf -confKey yarn.nodemanager.log-dirs에서 매개 변수 얻기

  • 자신이 시도한 환경은 CDH5 이었지만, /etc/hadoop 아래의 yarn-site.yml 에는 기재가 없고, CDH가 인스톨 되고 있는 디렉토리의 yarn-site.yml 를 읽는 것으로 디렉토리가 판명되었습니다.

    디렉토리 부하의 stdout이라는 파일에 gc 로그가 출력되고 있으므로 이것을 gc viewer등으로 읽어들입니다.

    좋은 웹페이지 즐겨찾기