查看日志和配置信息对于排查集群或作业的问题很有用。遗憾的是,日志和配置文件太多了,并且收集每个文件以进行调查可能非常耗时。为了解决此问题,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
命令生成的归档文件:
- 从 Cloud Storage 下载文件,然后共享下载的归档文件。
- 更改对归档文件的权限,以允许其他 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/ |