Dataproc 集群诊断数据收集

“查看 Dataproc 集群诊断数据”

您可以收集以下诊断数据,以帮助您排查集群和作业问题:

  • 检查点诊断数据:如果在创建集群时启用,Dataproc 会在集群生命周期内收集检查点诊断数据。
  • 快照诊断数据:您可以收集集群诊断数据的一次性快照。

检查点诊断数据收集

如果在创建集群时启用,Dataproc 会在创建集群更新集群Dataproc 作业操作期间收集已设置检查点的诊断数据

检查点数据位置

Dataproc 会将已设置检查点的诊断数据保存在 Cloud Storage 中集群的临时存储桶的以下文件夹 (checkpoint diagnostic data folder):

gs://TEMP_BUCKET/google-cloud-dataproc-diagnostic/CLUSTER_UUID 

默认集群临时存储桶的 TTL 保留期限为 90 天。数据会在保留期限结束时删除。指定自己的集群临时存储桶,并使用不同的 TTL 期限

检查点诊断数据

  • 集群节点详情日志: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 作业日志。系统会针对提交的每个 MapReduce 和 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/

启用并分享检查点诊断数据

创建集群时,您可以启用集群检查点诊断数据并与 Google Cloud 支持团队共享这些数据:

启用检查点数据收集

创建 Dataproc 集群时,添加 dataproc:diagnostic.capture.enabled=true 集群属性,以在集群上启用检查点诊断数据收集。

分享检查点数据

如果您在集群临时存储桶上启用统一的存储桶级访问权限,则临时存储桶的所有内容(包括收集的检查点诊断数据和临时数据,例如 MapReduce 作业历史记录文件、汇总的 YARN 日志和 Spark 事件日志)都会与Google Cloud 支持团队共享。

如果集群临时存储桶启用了对象级访问权限控制,则只会共享收集的检查点诊断数据(Cloud Storage 中检查点诊断数据文件夹中的数据)。

您可以在创建集群时或创建集群后启用与Google Cloud 支持团队共享检查点诊断数据的功能:

  • 在创建集群时启用共享创建集群时,添加以下属性:

    dataproc:diagnostic.capture.access=GOOGLE_DATAPROC_DIAGNOSE
    
  • 在创建集群后启用共享:您可以在创建集群后通过以下方式启用与 Google Cloud 支持团队共享检查点数据:

    • 向 Google Cloud 使用的服务账号提供对检查点数据的读取权限。

      • 如果临时存储桶启用了统一存储桶级访问权限,请添加 IAM 政策绑定:

        gcloud storage buckets add-iam-policy-binding gs://TEMP_BUCKET \
            --member=serviceAccount:cloud-diagnose@cloud-dataproc.iam.gserviceaccount.com \
            --role=roles/storage.objectViewer
        

      • 如果临时存储桶已启用对象级访问权限控制,请运行以下命令来共享检查点诊断数据:

        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
        

快照诊断数据收集

您可以运行以下 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