查看 Dataproc 集群诊断数据

“查看 Dataproc 集群诊断数据”

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
      

诊断数据

诊断数据包含写入 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 中。
  • 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 列表。

    • --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}