您可以運用下列 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
。
- MapReduce
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 應用程式記錄。
- 必須啟用 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