收集 Dataproc 叢集診斷資料

「查看 Dataproc 叢集診斷資料」

您可以運用下列 Dataproc 診斷資料收集功能,排解叢集和工作問題:

檢查點診斷資料收集

根據預設,Dataproc 會在叢集建立叢集更新Dataproc 工作作業期間,收集檢查點診斷資料

查核點資料位置

Dataproc 會將檢查點診斷資料儲存在 Cloud Storage 的叢集暫時值區中,位於下列資料夾 (checkpoint diagnostic data folder):

gs://TEMP_BUCKET/google-cloud-dataproc-diagnostic/CLUSTER_UUID 

預設叢集暫時值區的 TTL 保留期限為 90 天。保留期限屆滿時,系統會刪除資料。建立叢集時,您可以指定自己的叢集暫時儲存空間 bucket,並設定不同的 TTL 期限

檢查點診斷資料

  • 叢集節點詳細記錄:Dataproc 會執行下列指令,收集 YARN 和 HDFS 資訊,並寫入 Cloud Storage 中檢查點診斷資料夾的下列位置。

    執行的指令 診斷資料夾中的位置
    yarn node -list -all .../nodes/timestamp/yarn-nodes.log
    hdfs dfsadmin -report -live -decommissioning .../nodes/timestamp/hdfs-nodes.log

  • 工作詳細資料:Dataproc 會儲存使用 Dataproc Jobs API 的工作資訊,以及 MapReduce 工作和 Spark 工作記錄。系統會為提交的每個 MapReduce 和 Spark 工作收集這項工作資料。

    • MapReduce job.xml:包含工作設定的檔案,儲存在 .../jobs/JOB_UUID/mapreduce/job.xml
    • Spark 事件記錄:有助於偵錯的工作執行詳細資料,儲存位置為 .../jobs/JOB_UUID/spark/application-id
  • Linux 系統資訊:Dataproc 會執行下列指令,收集系統資訊並儲存在 Cloud Storage 中檢查點診斷資料夾的下列位置。

    指令 診斷資料夾中的位置
    sysctl -a .../system/sysctl.log
    cat /proc/sys/fs/file-nr .../system/fs-file-nr.log
    ping -c 1 .../system/cluster-ping.log
    cp /etc/hosts .../system/hosts_entries.log
    cp /etc/resolv.conf .../system/resolv.conf
  • 設定檔:Dataproc 會將下列設定檔儲存在 Cloud Storage 中檢查點診斷資料夾的下列位置。

    包含的項目 診斷資料夾中的位置
    Dataproc 屬性 .../configs/dataproc/dataproc.properties

    」中的所有檔案 /etc/google-dataproc/
    .../configs/dataproc/

    」中的所有檔案 /etc/hadoop/conf/
    .../configs/hadoop/
    /etc/hive/conf/」中的所有檔案 .../configs/hive/

    」中的所有檔案 /etc/hive-hcatalog/conf/
    .../configs/hive-hcatalog/
    /etc/knox/conf/」中的所有檔案 .../configs/knox/
    /etc/pig/conf/」中的所有檔案 .../configs/pig/

    」中的所有檔案 /etc/presto/conf/
    .../configs/presto/

    」中的所有檔案 /etc/spark/conf/
    .../configs/spark/
    /etc/tez/conf/」中的所有檔案 .../configs/tez/

    」中的所有檔案 /etc/zookeeper/conf/
    .../configs/zookeeper/

與支援團隊分享檢查點診斷資料

您可以透過下列方式,啟用與Google Cloud 支援團隊分享檢查點診斷資料的功能:

  • 在建立叢集時啟用共用功能建立叢集時,請新增下列選用叢集屬性

    dataproc:diagnostic.capture.access=GOOGLE_DATAPROC_DIAGNOSE
    

    這個屬性會自動將收集到的檢查點診斷資料分享給Google Cloud 支援團隊,因此您不必在每次建立叢集後手動分享。

  • 在叢集建立後啟用共用功能:叢集建立後,您可以為 Google Cloud 支援團隊使用的服務帳戶提供檢查點資料的讀取權,藉此啟用檢查點資料共用功能,如下所示:Google Cloud

    • 如果臨時 bucket 啟用統一 bucket 層級存取權,請新增 IAM 政策繫結:

      gcloud storage buckets add-iam-policy-binding gs://TEMP_BUCKET \
          --member=serviceAccount:cloud-diagnose@cloud-dataproc.iam.gserviceaccount.com \
          --role=roles/storage.objectViewer
      

    • 如果暫時值區已啟用物件層級存取權控管,請執行下列指令來共用檢查點診斷資料:

      gcloud storage objects update \
          gs://TEMP_BUCKET/google-cloud-dataproc-diagnostic/CLUSTER_UUID \
          --add-acl-grant=entity=user-cloud-diagnose@cloud-dataproc.iam.gserviceaccount.com,role=READER --recursive
      

停用查核點診斷資料收集功能

如要在叢集上停用檢查點診斷資料的收集作業,請在建立叢集時設定 dataproc:diagnostic.capture.enabled=false

收集快照診斷資料

您可以執行下列 gcloud dataproc clusters diagnose 指令,從執行中的叢集收集診斷資料快照。資料會以封存 (tar) 檔案的形式,寫入 Cloud Storage 中的 Dataproc 暫存值區

gcloud dataproc clusters diagnose CLUSTER_NAME \
    --region=REGION \
    --tarball-access=GOOGLE_DATAPROC_DIAGNOSE \
    --tarball-gcs-dir=TARBALL_DIR

注意:

  • CLUSTER_NAME:要診斷的叢集名稱。
  • REGION:叢集所在的區域,例如 us-central1
  • --tarball-access=GOOGLE_DATAPROC_DIAGNOSE 這個標記可讓Google Cloud 支援人員存取診斷 tar 檔案。請提供診斷資訊 tar 檔案的 Cloud Storage 路徑,以取得 Google Cloud 支援。

    除了提供 tar 檔案給支援團隊,您也可以提供叢集 UUID、診斷指令的作業 ID,以及叢集設定值區的 Cloud Storage 位置。

    如果您選擇將診斷 tar 檔案寫入特定目錄,請提供 Google Cloud 支援團隊 tar 檔案的完整 Cloud Storage 路徑,該路徑會由診斷指令列印。

  • TARBALL_DIR:選用。您可以使用這個標記指定 Cloud Storage 目錄,診斷 tar 檔案會寫入該目錄。如果省略這個旗標,診斷 tar 檔案就會寫入 Dataproc 暫存值區

  • Additional flags

    • --start-time--end-time:同時使用這兩個標記,以 %Y-%m-%dT%H:%M:%S.%fZ 格式指定收集診斷資料的時間範圍。指定時間範圍後,系統也會收集該時間範圍內的 Dataproc 自動調度資源記錄 (預設不會在診斷快照資料中收集 Dataproc 自動調度資源記錄)。

    • 您可以使用下列任一或兩個標記,收集特定作業驅動程式、Spark 事件、YARN 應用程式和 Sparklens 輸出內容記錄:

      • --job-ids:以半形逗號分隔的工作 ID 清單
      • --yarn-application-ids:以半形逗號分隔的 YARN 應用程式 ID 清單,

        • 必須啟用 YARN 記錄匯總功能 (yarn.log-aggregation-enable=true),才能收集 YARN 應用程式記錄。
        • 如果是 MapReduce 工作,系統只會收集 YARN 應用程式記錄。

選用:執行診斷指令碼

如果叢集處於錯誤狀態,且無法接受 Dataproc 伺服器的診斷工作,gcloud dataproc clusters diagnose 指令可能會失敗或逾時。除了執行診斷指令,您也可以使用 SSH 連線至叢集,然後在主要節點上在本機執行指令碼。

gcloud compute ssh HOSTNAME
gcloud storage cp gs://dataproc-diagnostic-scripts/diagnostic-script.sh .
sudo bash diagnostic-script.sh

診斷封存 tar 檔案會儲存在本機目錄中。指令輸出內容會列出 tar 檔案的位置,並說明如何將 tar 檔案上傳至 Cloud Storage bucket。

診斷快照資料

叢集快照資料包括診斷摘要和多個封存區段。

診斷摘要:封存檔包含位於封存檔根目錄的 summary.txt。這項功能會提供叢集狀態的總覽,包括 YARN、HDFS、磁碟和網路狀態,並顯示警告,提醒您注意潛在問題。

封存區段:封存檔案包含下列資訊,這些資訊會寫入下列封存檔案位置。

  • 精靈和服務資訊

    執行的指令 封存的位置
    yarn node -list -all /system/yarn-nodes.log
    hdfs dfsadmin -report -live -decommissioning /system/hdfs-nodes.log
    hdfs dfs -du -h /system/hdfs-du.log
    service --status-all /system/service.log
    systemctl --type service /system/systemd-services.log
    curl "http://${HOSTNAME}:8088/jmx" /metrics/resource_manager_jmx
    curl "http://${HOSTNAME}:8088/ws/v1/cluster/apps" /metrics/yarn_app_info
    curl "http://${HOSTNAME}:8088/ws/v1/cluster/nodes" /metrics/yarn_node_info
    curl "http://${HOSTNAME}:9870/jmx" /metrics/namenode_jmx

  • JVM 資訊

    執行的指令 封存的位置
    jstack -l "${DATAPROC_AGENTPID}" jstack/agent${DATAPROC_AGENT_PID}.jstack
    jstack -l "${PRESTOPID}" jstack/agent${PRESTO_PID}.jstack
    jstack -l "${JOB_DRIVERPID}" jstack/driver${JOB_DRIVER_PID}.jstack
    jinfo "${DATAPROC_AGENTPID}" jinfo/agent${DATAPROC_AGENT_PID}.jstack
    jinfo "${PRESTOPID}" jinfo/agent${PRESTO_PID}.jstack
    jinfo "${JOB_DRIVERPID}" jinfo/agent${JOB_DRIVER_PID}.jstack

  • Linux 系統資訊

    執行的指令 封存的位置
    df -h /system/df.log
    ps aux /system/ps.log
    free -m /system/free.log
    netstat -anp /system/netstat.log
    sysctl -a /system/sysctl.log
    uptime /system/uptime.log
    cat /proc/sys/fs/file-nr /system/fs-file-nr.log
    ping -c 1 /system/cluster-ping.log

  • 記錄檔

    包含的項目 封存的位置
    位於 /var/log 中且檔案名稱具有下列前置字串的所有記錄:
    cloud-sql-proxy
    dataproc
    druid
    gcdp
    google
    hadoop
    hdfs
    hive
    knox
    presto
    spark
    syslog
    yarn
    zookeeper
    檔案會放在封存的 logs 資料夾中,並且保留原始的檔案名稱。
    叢集中每個節點 (主要節點和工作站節點) 的 Dataproc 節點啟動記錄。 檔案會放在封存的 node_startup 資料夾中,此資料夾包含叢集內每部機器的個別子資料夾。
    journalctl -u google-dataproc-component-gateway的元件閘道記錄 /logs/google-dataproc-component-gateway.log

  • 設定檔

    包含的項目 封存的位置
    VM 中繼資料 /conf/dataproc/metadata
    /etc/environment 中的環境變數 /conf/dataproc/environment
    Dataproc 屬性 /conf/dataproc/dataproc.properties
    /etc/google-dataproc/」中的所有檔案 /conf/dataproc/
    /etc/hadoop/conf/」中的所有檔案 /conf/hadoop/
    /etc/hive/conf/」中的所有檔案 /conf/hive/
    /etc/hive-hcatalog/conf/」中的所有檔案 /conf/hive-hcatalog/
    /etc/knox/conf/」中的所有檔案 /conf/knox/
    /etc/pig/conf/」中的所有檔案 /conf/pig/
    /etc/presto/conf/」中的所有檔案 /conf/presto/
    /etc/spark/conf/」中的所有檔案 /conf/spark/
    /etc/tez/conf/」中的所有檔案 /conf/tez/
    /etc/zookeeper/conf/」中的所有檔案 /conf/zookeeper/

分享封存檔案

您可以與 Google Cloud 支援團隊或使用者共用封存檔案,以取得叢集或作業問題的疑難排解協助。

如要分享封存檔案,請按照下列步驟操作:

  • 從 Cloud Storage 複製封存檔案,然後共用下載的封存,或
  • 在封存上變更權限,允許其他使用者或專案存取檔案。 Google Cloud

    範例:下列指令會將封存的讀取權限授予專案 test-project 的擁有者:

    gcloud storage objects update PATH_TO_ARCHIVE --add-acl-grant=entity=project-owners-test-project,role=READER