Dataproc 的 Persistent History Server

概览

删除 Dataproc 集群后,用户通常希望查看作业历史记录文件以便诊断问题或达到其他目的。Dataproc Persistent History Server (PHS) 提供了一个界面,供您查看在活跃或已删除的 Dataproc 集群上运行的作业的作业历史记录。

Persistent History Server 在单节点 Dataproc 集群上运行,在 Cloud Storage 中存储和访问作业历史记录文件,并且支持 MapReduce、Spark 和 Pig 作业。Dataproc 映像版本 1.4-debian10 及更高版本均支持此功能。

设置 Dataproc 作业集群

您可以在创建 Dataproc 集群时指定以下标志和集群属性,该集群将运行作业并存储由 Persistent History Server 集群访问和显示的作业日志。

  • --enable-component-gateway必需标志。必须使用此标志来启用组件网关
  • dataproc:job.history.to-gcs.enabled必需的集群属性。此属性必须设置为“true”才能在 Cloud Storage 中启用作业历史记录存储。
  • spark:spark.history.fs.logDirectoryspark:spark.eventLog.dir可选集群属性。这些标志分别指定写入 Spark 作业历史记录和事件日志的位置。如果使用了这两个标志,则必须同时设置这两个标志并指向同一存储分区中的目录。
    示例属性
    spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history,
    spark:spark.eventLog.dir=gs://bucket-name/directory-name/spark-job-history
    
  • mapred:mapreduce.jobhistory.intermediate-done-dirmapred:mapreduce.jobhistory.done-dir可选集群属性。这些标志分别指定用于写入中间和最终 MapReduce 作业历史记录文件的 Cloud Storage 位置。如果使用了这两个标志,则必须同时设置这两个标志并指向同一存储分区中的目录。中间 mapreduce.jobhistory.intermediate-done-dir 位置是临时存储。MapReduce 作业完成后,中间文件将移至 mapreduce.jobhistory.done-dir 位置。
    示例属性
    mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory-name/mapreduce-job-history/done,
    mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done
    
  • 以下属性用于控制 1.4 及更高版本映像的事件日志的 Cloud Storage 刷新行为。注意:这些属性的默认配置允许在Spark 历史记录服务器界面中显示在使用 Cloud Storage 来存储 Spark 事件日志的集群的正在运行的作业。
    spark:spark.history.fs.gs.outputstream.type(default:BASIC)
    spark:spark.history.fs.gs.outputstream.sync.min.interval.ms (default: 5000ms).
    
  1. 运行 gcloud dataproc clusters create 命令以创建作业集群。必须使用映像 1.4-debian10 或更高版本创建集群。注意:为了便于阅读,--property 标志值位于单独的行中;运行该命令时,必须为一行指定所有以英文逗号分隔的 --property 标志值
    gcloud dataproc clusters create cluster-name \
        --region=region \
        --image-version=1.4-debian10 \
        --enable-component-gateway \
        --properties='dataproc:job.history.to-gcs.enabled=true,
    spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history,
    spark:spark.eventLog.dir=gs://bucket-name/directory/spark-job-history,
    mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory/mapreduce-job-history/done,
    mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done'
    

您可以运行以下简化命令,让 Dataproc 设置作业历史记录文件的 Cloud Storage 位置。

gcloud dataproc clusters create cluster-name \
    --region=region \
    --image-version=1.4-debian10 \
    --enable-component-gateway \
    --properties='dataproc:job.history.to-gcs.enabled=true'

如果您使用上面所示的简化命令,则作业历史记录文件将保存在 Dataproc 临时存储分区中的默认目录下:/spark-job-history/mapreduce-job-history/done/mapreduce-job-history/intermediate-donegcloud dataproc clusters describe cluster-name --region=region 命令的输出中列出了临时存储分区 Cloud Storage 位置。集群的 /etc/spark/conf/spark-defaults.conf/etc/hadoop/conf/mapred-site.xml 文件中还列出了作业历史记录文件的 Cloud Storage 位置

通过 SSH 连接到作业集群主节点后的示例:

cat /etc/spark/conf/spark-defaults.conf
...
spark.history.fs.logDirectory=gs://temp-bucket/spark-job-history
spark.eventLog.dir=gs://temp-bucket/spark-job-history
cat /etc/hadoop/conf/mapred-site.xml
...
<property>
  <name>mapreduce.jobhistory.done-dir</name>
  <value>gs://temp-bucket/mapreduce-job-history/done</value>
</property>
<property>
  <name>mapreduce.jobhistory.intermediate-done-dir</name>
  <value>gs://temp-bucket/mapreduce-job-history/done_intermediate</value>
</property>

设置 Persistent History Server

您可以在创建 PHS 单节点集群时指定以下标志和集群属性

  • --enable-component-gateway必需标志。必须使用此标志来启用组件网关
  • spark:spark.history.fs.logDirectory用于启用永久性 Spark 作业历史记录的强制性集群属性。此属性用于指定 PHS 将访问作业集群编写的 Spark 作业历史记录日志的 Cloud Storage 存储分区和目录(请参阅设置 Dataproc 作业集群)。您无需指定特定的存储分区目录,而是使用星号作为通配符(例如 gs://bucket-name/*/spark-job-history),以允许 PHS 服务器匹配所指定存储分区中由不同作业集群写入的多个目录(但请参阅效率注意事项:使用路径中间通配符
  • mapred:mapreduce.jobhistory.read-only.dir-pattern用于启用永久性 MapReduce 作业历史记录的强制性集群属性。此属性用于指定 PHS 将访问作业集群编写的 MapReduce 作业历史记录日志的 Cloud Storage 存储分区目录(请参阅设置作业集群)。您无需指定特定的存储分区目录,而是使用星号作为通配符(例如 gs://bucket-name/*/mapreduce-job-history/done),以允许 PHS 服务器匹配所指定存储分区中由不同作业集群写入的多个目录(但请参阅效率注意事项:使用路径中间通配符
  1. 运行 gcloud dataproc clusters create 命令以创建单节点 Dataproc PHS 集群。
    gcloud dataproc clusters create cluster-name \
        --single-node \
        --region=region \
        --image-version=1.4-debian10 \
        --enable-component-gateway \
        --properties='spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history,mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done'
    

在 Cloud Console 中,转到 PHS 单节点集群详情页面,然后点击“Web 界面”标签页。在组件网关下,点击“MapReduce 作业历史记录”或“Spark 历史记录服务器”即可查看 MapReduce 和 Spark 的作业历史记录界面。

Spark 历史记录服务器界面

以下屏幕截图展示了 Spark 历史记录服务器界面,其中显示了在设置作业集群的 spark.history.fs.logDirectoryspark:spark.eventLog.dir 以及 PHS 集群的 spark.history.fs.logDirectory 位置之后,在 job-cluster-1 和 job-cluster-2 上运行的 Spark 作业的链接:

job-cluster-1 gs://example-cloud-storage-bucket/job-cluster-1/spark-job-history
job-cluster-2 gs://example-cloud-storage-bucket/job-cluster-2/spark-job-history
phs-cluster gs://example-cloud-storage-bucket/*/spark-job-history

您可以通过在搜索框中输入应用名称,在 Spark 历史记录服务器界面中按名称列出作业。应用名称可以通过以下方式之一设置(按优先级列出):

  1. 创建 Spark 上下文时在应用代码内设置
  2. 提交作业时由 spark.app.name 属性设置
  3. 由 Dataproc 设置为作业的完整 REST 资源名称 (projects/project-id/regions/region/jobs/job-id)

事件日志

Spark 历史记录服务器界面提供一个事件日志按钮,您可以点击该按钮以下载 Spark 事件日志。这些日志适用于检查 Spark 应用的生命周期。

Spark 作业

Spark 应用分为多个作业,这些作业进一步分为多个阶段。每个阶段可能有多个任务,这些任务在执行程序节点(工作器)上运行。

  • 点击界面中的 Spark 应用 ID 以打开“Spark 作业”页面,该页面提供了事件时间轴以及应用中的作业摘要。

  • 点击某个作业即可打开“作业详情”页面,其中包含有向无环图 (DAG) 以及作业阶段的摘要。

  • 点击某个阶段或使用“阶段”标签页选择某个阶段即可打开“阶段详情”页面。

    “阶段详情”包括阶段内任务的 DAG 可视化、事件时间轴和指标。您可以使用此页面排查与绞杀任务、调度程序延迟时间和内存不足错误相关的问题。DAG 可视化工具会显示从中派生阶段的代码行,从而帮助您追踪发生问题的代码。

  • 点击“执行程序”标签页,了解 Spark 应用的驱动程序和执行程序节点。

    本页面上的重要信息包括核心数和每个执行程序上运行的任务数。