Dataproc 会收集以下集群诊断数据,以帮助您排查集群和作业问题:
检查点数据
启用检查点数据功能后,Dataproc 会在创建集群、更新集群和执行 Dataproc Jobs API 操作期间收集诊断数据。Dataproc 会将数据保存在 Cloud Storage 中的集群 temp bucket
中,其 TTL 保留期限为 90 天。这些数据会在保留期限结束时被删除。
启用数据收集属性:在创建集群时,您可以添加以下可选集群属性。它们只会影响在创建的集群上收集检查点诊断数据。
- 启用数据收集:设置
dataproc:diagnostic.capture.enabled=true
属性可在集群上收集检查点诊断数据。 - 分享诊断数据:设置
dataproc:diagnostic.capture.access=GOOGLE_DATAPROC_DIAGNOSE
媒体资源会与Google Cloud 支持团队分享收集的检查点诊断数据。- 创建集群后,您可以向 Google Cloud 支持团队 Google Cloud 授予对数据的读取权限,以便与支持团队共享诊断数据,如下所示:
gsutil -m acl ch -r -u \ cloud-diagnose@cloud-dataproc.iam.gserviceaccount.com:R \ gs://TEMP_BUCKET/google-cloud-dataproc-diagnostic/CLUSTER_UUID
- 创建集群后,您可以向 Google Cloud 支持团队 Google Cloud 授予对数据的读取权限,以便与支持团队共享诊断数据,如下所示:
诊断数据
诊断数据包含写入 Cloud Storage 中的 gs://TEMP_BUCKET/google-cloud-dataproc-diagnostic/CLUSTER_UUID/
的以下数据。本部分将此位置称为诊断数据文件夹。
集群节点详细日志: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 作业日志。系统会为提交的每个 MR 作业和 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/
快照数据
您可以运行以下 gcloud dataproc clusters diagnose
命令,从正在运行的集群收集诊断数据的快照。系统会将数据作为归档 (tar) 文件写入 Cloud Storage 中的 Dataproc 暂存桶。
gcloud dataproc clusters diagnose CLUSTER_NAME \ --region=REGION \ --tarball-access=GOOGLE_DATAPROC_DIAGNOSE
备注:
- CLUSTER_NAME:要诊断的集群的名称。
- REGION:集群所在的区域,例如
us-central1
。 OPTIONAL FLAGS:
您可以使用以下任一标志收集特定作业驱动程序、Spark 事件、YARN 应用和 Sparklens 输出日志。备注:
- 必须启用 YARN 日志汇总 (
yarn.log-aggregation-enable=true
),才能收集 YARN 应用日志。 对于 MapReduce 作业,系统只会收集 YARN 应用日志。
--job-ids
:以英文逗号分隔的作业 ID 列表。--yarn-application-ids
:以英文逗号分隔的 YARN 应用 ID 列表。
- 必须启用 YARN 日志汇总 (
--start-time
与--end-time
搭配使用:结合使用这两个标志,以%Y-%m-%dT%H:%M:%S.%fZ
格式指定用于收集诊断数据的时间范围。指定时间范围还可收集相应时间范围内的 Dataproc 自动扩缩日志(默认情况下,诊断快照数据中不会收集 Dataproc 自动扩缩日志)。--tarball-access
=GOOGLE_DATAPROC_DIAGNOSE
使用此标志可向 Google Cloud 支持团队提交诊断 tar 文件或提供对该文件的访问权限。并向 Google Cloud 支持团队提供以下信息:- 诊断 tar 文件的 Cloud Storage 路径或
- 集群配置存储桶、集群 UUID 和 diagnose 命令的操作 ID
如有必要,运行诊断脚本
如果集群处于错误状态,并且不能接受来自 Dataproc 服务器的诊断任务,则 gcloud dataproc clusters diagnose
命令可能会失败或超时。除了运行 diagnose 命令之外,您还可以使用 SSH 连接到集群主节点,下载诊断脚本,然后在主节点上本地运行该脚本。
gcloud compute ssh HOSTNAME
gsutil cp gs://dataproc-diagnostic-scripts/diagnostic-script.sh .
sudo bash diagnostic-script.sh
诊断归档 tar 文件会保存在本地目录中。该命令的输出会列出 tar 文件的位置,并说明如何将 tar 文件上传到 Cloud Storage 存储桶。
诊断快照数据
集群快照数据包括诊断摘要和多个归档部分。
诊断摘要:归档文件包含位于归档根目录下的 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
配置文件
包含的内容 在归档文件中的位置 虚拟机元数据 /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
中归档文件的读取权限:gsutil -m acl ch -g test-project:R PATH_TO_ARCHIVE}