查看 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 支持团队共享诊断数据,如下所示:
      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 \
      

诊断数据

诊断数据包含写入 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
  • --tarball-access=GOOGLE_DATAPROC_DIAGNOSE:此标志可向Google Cloud 支持团队提供对诊断 tar 文件的访问权限。请为 Google Cloud 支持团队提供诊断 tar 文件的 Cloud Storage 路径。

  • 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 应用日志。

必要时运行诊断脚本

如果集群处于错误状态,并且无法接受来自 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