Dataproc 日志

您可以在 Cloud Logging 中查看、搜索、过滤和归档 Dataproc 作业和集群日志。

组件日志记录级别

创建集群时,使用特定于组件的 Log4j 集群属性(例如 hadoop-log4j)设置 Spark、Hadoop、Flink 和其他 Dataproc 组件日志记录级别。基于集群的组件日志记录级别适用于服务守护程序(例如 YARN ResourceManager)以及在集群上运行的作业。

如果某个组件(例如 Presto 组件)不支持 log4j 属性,请编写用于修改组件的 log4j.propertieslog4j2.properties 文件的初始化操作

作业专用组件日志记录级别:您还可以在提交作业时设置组件日志记录级别。这些日志记录级别会应用于作业,并且优先于您在创建集群时设置的日志记录级别。如需了解详情,请参阅集群属性与作业属性

Spark 和 Hive 组件版本日志记录级别

Spark 3.3.X 和 Hive 3.X 组件使用 log4j2 属性,而这些组件的旧版本使用 log4j 属性(请参阅 Apache Log4j2)。使用 spark-log4j: 前缀在集群上设置 Spark 日志记录级别。

  • 示例:使用 Dataproc 映像版本 2.0 和 Spark 3.1 设置 log4j.logger.org.apache.spark

    gcloud dataproc clusters create ... \
        --properties spark-log4j:log4j.logger.org.apache.spark=DEBUG
    
  • 示例:Dataproc 映像版本 2.1 搭配 Spark 3.3 来设置 logger.sparkRoot.level

    gcloud dataproc clusters create ...\
        --properties spark-log4j:logger.sparkRoot.level=debug
    

作业驱动程序日志记录级别

Dataproc 为作业驱动程序使用默认的日志记录级别 INFO。您可以使用 gcloud dataproc jobs submit --driver-log-levels 标志为一个或多个软件包更改此设置。

示例:

提交用于读取 Cloud Storage 文件的 Spark 作业时,请设置 DEBUG 日志记录级别。

gcloud dataproc jobs submit spark ...\
    --driver-log-levels org.apache.spark=DEBUG,com.google.cloud.hadoop.gcsio=DEBUG

示例:

root 日志记录器级别设置为 WARN,将 com.example 日志记录器级别设置为 INFO

gcloud dataproc jobs submit hadoop ...\
    --driver-log-levels root=WARN,com.example=INFO

Spark 执行程序日志记录级别

如需配置 Spark 执行程序日志记录级别,请执行以下操作:

  1. 准备 log4j 配置文件,然后将其上传到 Cloud Storage

  2. 在提交作业时引用您的配置文件。

    示例:

    gcloud dataproc jobs submit spark ...\
        --file gs://my-bucket/path/spark-log4j.properties \
        --properties spark.executor.extraJavaOptions=-Dlog4j.configuration=file:spark-log4j.properties
    

Spark 会将 Cloud Storage 属性文件下载到作业的本地工作目录(在 -Dlog4j.configuration 中引用为 file:<name>)。

Logging 中的 Dataproc 作业日志

如需了解如何在 Logging 中启用 Dataproc 作业驱动程序日志,请参阅 Dataproc 作业输出和日志

访问 Logging 中的作业日志

使用日志浏览器gcloud logging 命令或 Logging API 访问 Dataproc 作业日志。

Dataproc 作业驱动程序日志和 YARN 容器日志列在 Cloud Dataproc 作业资源下。

示例:使用以下选择运行日志浏览器查询后,作业驱动程序日志:

  • 资源Cloud Dataproc Job
  • 日志名称dataproc.job.driver

示例:使用以下选择运行日志浏览器查询后生成的 YARN 容器日志:

  • 资源Cloud Dataproc Job
  • 日志名称dataproc.job.yarn.container

您可以使用 gcloud logging read 命令来读取作业日志条目。资源参数必须括在英文引号 ("...") 中。 以下命令使用集群标签来过滤返回的日志条目。

gcloud logging read \
    "resource.type=cloud_dataproc_job \
    resource.labels.region=cluster-region \
    resource.labels.job_id=my-job-id"

示例输出(部分):

jsonPayload:
  class: org.apache.hadoop.hdfs.StateChange
  filename: hadoop-hdfs-namenode-test-dataproc-resize-cluster-20190410-38an-m-0.log
  ,,,
logName: projects/project-id/logs/hadoop-hdfs-namenode
---
jsonPayload:
  class: SecurityLogger.org.apache.hadoop.security.authorize.ServiceAuthorizationManager
  filename: cluster-name-dataproc-resize-cluster-20190410-38an-m-0.log
  ...
logName: projects/google.com:hadoop-cloud-dev/logs/hadoop-hdfs-namenode

您可以使用 Logging REST API 列出日志条目(请参阅 entries.list)。

Logging 中的 Dataproc 集群日志

Dataproc 会将以下 Apache Hadoop、Spark、Hive、Zookeeper 和其他 Dataproc 集群日志导出到 Cloud Logging。

日志类型 日志名称 说明
主守护进程日志 hadoop-hdfs
hadoop-hdfs-namenode
hadoop-hdfs-secondary namenode
hadoop-hdfs-zkfc
hadoop-yarn-resourcemanager
hadoop-yarn-timelineserver
hive-metastore
hive-server2
mapred-mapred-historyserver
zookeeper
日志节点
HDFS 名称节点
HDFS 辅助名称节点
Zookeeper 故障切换控制器
YARN 资源管理器
YARN Timeline Server
Hive Metastore
Hive server2
MapReduce 作业历史记录服务器
Zookeeper 服务器
工作器守护进程日志 hadoop-hdfs-datanode
hadoop-yarn-nodemanager
HDFS 数据节点
YARN 节点管理器
系统日志 autoscaler
google.dataproc.agent
google.dataproc.startup
Dataproc 自动调节程序日志
Dataproc 代理日志
Dataproc 启动脚本日志 + 初始化操作日志
扩展(额外)日志 knox
gateway-audit
zeppelin
solr
trino
presto
ranger-usersync
jupyter_notebook
spark-history-server
与以下各项匹配的 /var/log/ 子目录中的所有日志:
knox(包括 gateway-audit.log)
zeppelin
solr
trino
presto
ranger-usersync
jupyter_notebook
spark-history-server
虚拟机系统日志 syslog
集群主节点和工作器节点的 Syslog

访问 Cloud Logging 中的集群日志

您可以使用日志浏览器gcloud logging 命令或 Logging API 来访问 Dataproc 集群日志。

进行以下查询选择,即可在日志浏览器中查看集群日志:

  • 资源Cloud Dataproc Cluster
  • 日志名称log name

您可以使用 gcloud logging read 命令来读取集群日志条目。资源参数必须括在英文引号 ("...") 中。 以下命令使用集群标签来过滤返回的日志条目。

gcloud logging read <<'EOF'
    "resource.type=cloud_dataproc_cluster
    resource.labels.region=cluster-region
    resource.labels.cluster_name=cluster-name
    resource.labels.cluster_uuid=cluster-uuid"
EOF

示例输出(部分):

jsonPayload:
  class: org.apache.hadoop.yarn.server.resourcemanager.ResourceTrackerService
  filename: hadoop-yarn-resourcemanager-cluster-name-m.log
  ...
logName: projects/project-id/logs/hadoop-yarn-resourcemanager
---
jsonPayload:
  class: org.apache.hadoop.yarn.server.resourcemanager.ResourceTrackerService
  filename: hadoop-yarn-resourcemanager-component-gateway-cluster-m.log
  ...
logName: projects/project-id/logs/hadoop-yarn-resourcemanager

您可以使用 Logging REST API 列出日志条目(请参阅 entries.list)。

权限

要将日志写入 Logging,Dataproc 虚拟机服务账号必须具有 logging.logWriter 角色 IAM 角色。默认 Dataproc 服务账号具有此角色。如果使用自定义服务账号,则您必须将此角色分配给该服务账号。

保护日志

默认情况下,Logging 中的日志会在静态存储时进行加密。您可以启用客户管理的加密密钥 (CMEK) 来加密日志。如需详细了解 CMEK 支持,请参阅管理用于保护日志路由器数据的密钥管理用于保护 Logging 存储数据的密钥

后续步骤