诊断 Dataproc 集群

查看日志和配置信息对于排查集群或作业的问题很有用。遗憾的是,日志和配置文件太多了,并且收集每个文件以进行调查可能非常耗时。为了解决此问题,Dataproc 集群通过 Google Cloud CLI 支持特殊的 diagnose 命令。此命令会收集并归档重要系统、Spark/Hadoop 和 Dataproc 日志,然后将归档文件上传至挂接到集群的 Cloud Storage 存储分区。

使用 Google Cloud CLI 诊断命令

您可以在 Dataproc 集群上使用 Google Cloud CLI diagnose命令(请参阅 Dataproc 和 Google Cloud CLI)。

安装并配置 gcloud CLI 后,您可以在集群上运行 gcloud dataproc clusters diagnose 命令,如下所示。将 cluster-name 替换为您的集群名称,并将 region 替换为您的集群的区域,例如 --region=us-central1

gcloud dataproc clusters diagnose cluster-name \
    --region=region \
    ... other args ...

该命令会输出包含数据的归档文件的 Cloud Storage 位置(请参阅 diagnose 命令输出中包含的项)。如需了解如何访问和复制归档文件,请参阅共享 diagnose 收集的数据

从主节点运行诊断脚本(可选)

如果集群处于错误状态,并且不能接受来自 Dataproc 服务器的诊断任务,则 Google Cloud CLI diagnose 命令可能会失败或超时。为避免此问题,您可以通过 SSH 连接到主节点,下载诊断脚本,然后在主节点上本地运行该脚本:

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

诊断 tar 压缩文件将保存到本地临时目录中。如果需要,您可以按照命令输出中的说明将其上传到 Cloud Storage 存储桶,并与 Google 支持人员共享。

共享 diagnose 命令收集的数据

您可以通过以下两种方式共享 diagnose 命令生成的归档文件:

  1. 从 Cloud Storage 下载文件,然后共享下载的归档文件。
  2. 更改对归档文件的权限,以允许其他 Google Cloud Platform 用户或项目访问该文件。

例如,以下命令会添加对 test-project 中诊断归档文件的读取权限:

gsutil -m acl ch -g test-project:R path-to-archive

diagnose 命令输出中包含的内容

diagnose 命令会将集群中的以下配置文件、日志和输出包含在归档文件中。如上所述,归档文件位于与 Dataproc 集群所关联的 Cloud Storage 存储桶中。

诊断摘要

诊断脚本会自动分析收集的数据,并在诊断 tar 压缩文件的根目录下生成 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_AGENT_PID}" jstack/agent_${DATAPROC_AGENT_PID}.jstack
jstack -l "${PRESTO_PID}" jstack/agent_${PRESTO_PID}.jstack
jstack -l "${JOB_DRIVER_PID}" jstack/driver_${JOB_DRIVER_PID}.jstack
jinfo "${DATAPROC_AGENT_PID}" jinfo/agent_${DATAPROC_AGENT_PID}.jstack
jinfo "${PRESTO_PID}" jinfo/agent_${PRESTO_PID}.jstack
jinfo "${JOB_DRIVER_PID}" 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
gcs
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/