您可以利用以下 Dataproc 诊断数据收集功能来排查集群和作业问题:
检查点诊断数据收集
默认情况下,Dataproc 会在集群创建、集群更新和 Dataproc 作业操作期间收集检查点诊断数据。
检查点数据位置
Dataproc 会将已设置检查点的诊断数据保存在 Cloud Storage 中集群的临时存储桶的以下文件夹 (checkpoint diagnostic data folder
):
gs://TEMP_BUCKET/google-cloud-dataproc-diagnostic/CLUSTER_UUID
默认集群临时存储桶的 TTL 保留期限为 90 天。数据会在保留期限结束时删除。指定自己的集群临时存储桶,并使用不同的 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 支持团队共享检查点数据,如下所示:
如果临时存储桶启用了统一存储桶级访问权限,请添加 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 文件的访问权限。请为 Google Cloud 支持团队提供诊断 tar 文件的 Cloud Storage 路径。除了向支持团队提供 tar 文件之外,您还可以提供集群 UUID、诊断命令的操作 ID 以及集群配置存储桶的 Cloud Storage 位置。
如果您选择将诊断 tar 文件写入特定目录,请为 Google Cloud 支持团队提供诊断命令输出的 tar 文件的完整 Cloud Storage 路径。
TARBALL_DIR:可选。您可以使用此标志指定将写入诊断 tar 文件的 Cloud Storage 目录。如果省略此标志,诊断 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 存储桶的说明。
诊断快照数据
集群快照数据包含诊断摘要和多个归档部分。
诊断摘要:归档文件包含位于归档文件根目录的 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
的所有者授予对归档文件的读取权限:gcloud storage objects update PATH_TO_ARCHIVE --add-acl-grant=entity=project-owners-test-project,role=READER