Dataproc 诊断集群命令

“Dataproc 集群命令诊断摘要 | Google Cloud”

您可以运行 gcloud dataproc clusters diagnose 命令来收集系统、Spark、Hadoop 和 Dataproc 日志、集群配置文件,以及您可以检查或与 Google 支持团队共享的其他信息,以帮助对 Dataproc 集群或作业进行问题排查。该命令将诊断数据和摘要上传到 Cloud Storage 中的 Dataproc 暂存存储桶

运行 Google Cloud CLI diagnose cluster 命令

运行 gcloud dataproc clusters diagnose 命令以创建并输出诊断归档文件的位置。

gcloud dataproc clusters diagnose CLUSTER_NAME \
    --region=REGION \
    OPTIONAL FLAGS ...

备注:

  • CLUSTER_NAME:要诊断的集群的名称。
  • REGION:集群的区域,例如 us-central1
  • OPTIONAL FLAGS:

    • --job-ids:除了默认日志文件之外,您还可以为指定的作业 ID 列表收集作业驱动程序、Spark 事件、YARN 应用和 Spark 智能镜头输出日志。对于 MapReduce 作业,仅收集 YARN 应用日志。必须为收集 YARN 应用日志启用 YARN 日志汇总。

    • --yarn-application-ids:除了默认日志文件之外,您还可以为指定的 YARN 应用 ID 列表收集作业驱动程序、Spark 事件、YARN 应用和 Spark 智能镜头输出日志。必须为收集 YARN 应用日志启用 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 以及诊断命令的操作 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 存储桶的说明。

如何分享诊断数据

如需分享归档文件,请执行以下操作:

示例:以下命令会在 test-project 中添加对归档文件的读取权限:

gsutil -m acl ch -g test-project:R PATH_TO_ARCHIVE}

诊断摘要和归档内容

diagnose 命令会输出一个诊断摘要和一个归档文件 tar 文件,其中包含集群配置文件、日志以及其他文件和信息。归档文件 tar 文件会写入 Cloud Storage 中的 Dataproc 暂存存储桶

诊断摘要:诊断脚本会分析收集的数据,并在诊断归档的根目录下生成 summary.txt。此摘要概述了集群状态(包括 YARN、HDFS、磁盘和网络状态),并包含用于提醒您潜在问题的警告。

归档 tar 文件:以下部分列出了诊断归档 tar 文件中包含的文件和信息。

守护程序和服务信息

执行的命令 在归档文件中的位置
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
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/