Spark 작업 기록을 Spark History Server로 가져오기

목적



Apache Spark의 WebUI는 애플리케이션 디버깅에 매우 유용합니다.

디버깅을 위해이 웹 UI를 사용하여 프로덕션 환경에서 얻은 로그를 확인 환경에서 확인하고 싶을 수 있습니다.
취득한 이벤트의 로그를 Spark의 History Server에 건네주는 것으로, 프로덕션 환경의 이벤트 로그를 수중의 환경에서 볼 수 있어 편리합니다. (Thanks! @kmizumar )
이번은 CDH5.7의 환경에서 검증했습니다.

(2016/7/20 Cloudera의 라이센스로 로그를 취득할 수 없기 때문에 일부 기재를 변경)

환경


  • Spark 1.6
  • CDH5.7
  • Cloudera Manager 5.7

  • Hue에서 Hive on Spark로 쿼리 실행



    이번 Spark를 실행한 것은 Cloudera Manager 5.7로 구축한 YARN의 환경입니다. Hive를 Spark에서 실행하려면 Hue의 Hive 쿼리 편집기에서 쿼리를 실행하기 전에 다음 옵션을 지정합니다.
    set hive.execution.engine=spark
    



    Spark 이벤트 로그 수집(Cloudera Enterprise 라이센스가 있는 경우)



    Cloudera Enteprise 라이센스가 있는 경우 Cloudera Manager UI에서 이벤트 로그를 수집할 수 있습니다. (라이센스가 없으면 이벤트 로그를 직접 복사합니다. 절차는 나중에 설명합니다)

    Cloudera Manager에서 YARN 애플리케이션 보기



    Cloudera Manager를 사용하면 클러스터에서 실행되는 YARN(MapReduce 또는 Spark) 및 Impala 애플리케이션의 기록을 나열할 수 있습니다. 아래의 스크리샷은 YARN에서 실행된 애플리케이션을 보여줍니다.


    애플리케이션의 진단 데이터 수집



    방금 실행한 Hive on Spark(Spark 어플리케이션)의 진단 데이터를 우측의 메뉴로부터 취득합니다.





    Cloudera 구독을 계약하는 경우 지원팀에 진단 데이터를 보낼 수도 있지만 이번에는 '진단 데이터 수집' 버튼을 클릭하여 다운로드했습니다. 결과 데이터 다운로드 버튼을 눌러 각 진단 정보와 메타데이터를 아카이브하고 다운로드합니다.


    다운로드된 파일은 다음 파일입니다.
    12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
    

    로컬 환경에서 표시



    다운로드 데이터를 Spark 검증 환경에 업로드



    다운로드한 데이터를 로컬 Spark 환경에 업로드하고 내용을 살펴봅니다.
    [kawasaki@localhost Desktop]$ unzip -l 12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
    Archive:  12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
      Length      Date    Time    Name
    ---------  ---------- -----   ----
          485  07-14-2016 00:56   arguments.json
       198309  07-14-2016 00:56   YarnApplicationDiagnosticsCollection-1802.tgz
          179  07-14-2016 00:56   cm_version.json
        62158  07-14-2016 00:56   cm_http_instrumentation.json
           53  07-14-2016 00:56   bundle-meta.json
            1  07-14-2016 00:56   ticket_number.txt
          158  07-14-2016 00:56   license.json
          630  07-14-2016 00:56   performance-data.json
           80  07-14-2016 00:56   trial_status.json
      2176204  07-14-2016 00:56   scm-cluster-description.json
       207009  07-14-2016 00:56   cm_deployment.json
            1  07-14-2016 00:56   comments.txt
    ---------                     -------
      2645267                     12 files
    [kawasaki@localhost Desktop]$
    

    zip 파일 확장


    [kawasaki@localhost Desktop]$ unzip 12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
    Archive:  12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
      inflating: arguments.json
      inflating: YarnApplicationDiagnosticsCollection-1802.tgz
      inflating: cm_version.json
      inflating: cm_http_instrumentation.json
      inflating: bundle-meta.json
      inflating: ticket_number.txt
      inflating: license.json
      inflating: performance-data.json
      inflating: trial_status.json
      inflating: scm-cluster-description.json
      inflating: cm_deployment.json
      inflating: comments.txt
    [kawasaki@localhost Desktop]$
    

    여기에 배포된 파일 중 YarnApplication*.tgz 파일에 이벤트 로그가 포함되어 있습니다. (그 외의 정보는 Cloudera Manager 메타데이터 등입니다). tgz 파일을 확장합시다.
    [kawasaki@localhost Desktop]$ tar xvf YarnApplicationDiagnosticsCollection-1802.tgz
    diagnostics/
    diagnostics/command.log
    diagnostics/layout_version.txt
    diagnostics/application_1468417076413_0022/
    diagnostics/application_1468417076413_0022/spark_event_logs.zip
    diagnostics/application_1468417076413_0022/app_info.json
    diagnostics/application_1468417076413_0022/app_attempts.json
    diagnostics/application_1468417076413_0022/aggregated_logs/
    diagnostics/application_1468417076413_0022/aggregated_logs/application_1468417076413_0022/
    diagnostics/application_1468417076413_0022/aggregated_logs/application_1468417076413_0022/nightly57-3.gce.cloudera.com_8041
    diagnostics/application_1468417076413_0022/aggregated_logs/application_1468417076413_0022/nightly57-4.gce.cloudera.com_8041
    [kawasaki@localhost Desktop]$
    

    여기에서 확장된 spark_event_logs.zip이 이벤트 로그입니다. zip 파일을 확장합시다.
    [kawasaki@localhost Desktop]$ unzip diagnostics/application_1468417076413_0022/spark_event_logs.zip
    Archive:  diagnostics/application_1468417076413_0022/spark_event_logs.zip
      inflating: application_1468417076413_0022_1
    [kawasaki@localhost Desktop]$
    

    이벤트 로그를 Spark History Server 로그 디렉토리에 업로드



    배포된 파일을 Spark History Server에 업로드합니다. 업로드 대상은 spark.history.fs.logDirectory 속성에 지정되며 이 환경에서는 hdfs://localhost:8020/user/spark/applicationHistory입니다.
    [kawasaki@localhost Desktop]$ hdfs dfs -put diagnostics/application_146841 /user/spark/applicationHistory
    application_1468416381293_0021/ application_1468417076413_0022/
    

    Spark 이벤트 로그 수집(Cloudera Manager를 사용하지 않는 경우)



    Cloudera Manager를 사용하지 않는 경우 이벤트 로그 파일을 검색하여 History Server에 업로드합니다. 설정에 따라 다르지만 이벤트 로그는 hdfs://:8020/user/spark/applicationHistory 아래에 생성됩니다.

    Spark 작업을 실행한 환경에서 로그를 다운로드합니다.
    [kawasaki@hoge Desktop]$ hdfs dfs -ls /user/spark/applicationHistory
    Found 1 items
    -rwxrwx--    1 kawasaki spark    716000 2016-07-19 15:50  /user/spark/applicationHistory/application_1468417076413_0022
    [kawasaki@hoge Desktop]$ hdfs dfs -get /user/spark/applicationHistory/application_1468417076413_0022
    [kawasaki@hoge Desktop]$
    
    

    다운로드한 파일을 업로드합니다.
    [kawasaki@localhost Desktop]$ hdfs dfs -put 
    application_1468416381293_0022 /user/spark/applicationHistory
    

    Spark History Server의 WebUI에서 보기



    http://:에 액세스하여 표시합니다. 로컬에서 얻은 것처럼 볼 수 있습니다! Enjoy!







    참고 정보




    If Spark is run on Mesos or YARN, it is still possible to reconstruct the UI of a finished application through Spark’s history server, provided that the application’s event logs exist. You can start the history server by executing:

    좋은 웹페이지 즐겨찾기