概览
Dataproc Persistent History Server (PHS) 提供了 Web 界面,供您查看在活跃或已删除的 Dataproc 集群上运行的作业的作业历史记录。该功能在 Dataproc 映像版本 1.5 及更高版本中提供,并在单节点 Dataproc 集群上运行。它提供网页界面 应用于以下文件和数据:
MapReduce 和 Spark 作业历史记录文件
Flink 作业历史记录文件(请参阅 Dataproc 可选 Flink 组件 创建 Dataproc 集群以运行 Flink 作业)
由以下人员创建的应用时间轴数据文件: YARN 时间轴服务 v2,存储在 Bigtable 实例中。
YARN 汇总日志
永久历史记录服务器访问并显示 Spark 和 MapReduce 作业历史记录 文件、Flink 作业历史记录文件以及写入 Cloud Storage 的 YARN 日志文件 Dataproc 作业集群的生命周期中的一部分。
限制
借助 Dataproc PHS 集群,您可以查看作业历史记录文件 仅限在 PHS 集群所在的项目中运行的 Dataproc 作业 。此外,PHS 集群映像版本和 Dataproc 作业集群映像版本必须匹配。例如,您可以使用 Dataproc 2.0 映像版本 PHS 集群,用于查看已运行作业的作业历史记录文件 位于 Dataproc 2.0 映像版本作业集群上 在 PHS 集群所在的项目中。
创建 Dataproc PHS 集群
您可以运行以下命令
gcloud dataproc clusters create
启动命令
Cloud Shell,其中包含以下标志和
集群属性
创建 Dataproc Persistent History Server 单节点集群。
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT \ --region=REGION \ --single-node \ --enable-component-gateway \ --optional-components=COMPONENT \ --properties=PROPERTIES
- CLUSTER_NAME:指定 PHS 集群的名称。
- PROJECT:指定要与 PHS 集群关联的项目。此项目应与运行作业的集群关联的项目相同(请参阅创建 Dataproc 作业集群)。
- REGION:指定 Compute Engine 区域 PHS 集群所在的位置。
--single-node
:PHS 集群是 Dataproc 单节点集群。--enable-component-gateway
:此标志用于启用 组件网关 PHS 集群上的 Web 界面。- COMPONENT:使用此标志可安装一个或多个
可选组件
集群上您必须指定
FLINK
可选组件才能运行 要查看 PHS 集群上的 Flink HistoryServer 网络服务 Flink 作业历史记录文件。 - PROPERTIES。请指定一个或多个 集群属性。
(可选)添加 --image-version 标志指定 PHS 集群映像版本。PHS 映像版本 与 Dataproc 作业集群的映像版本匹配。请参阅 限制。
注意:
- 本部分中的属性值示例使用“*”通配符,以允许 PHS 匹配指定存储桶中由不同作业集群写入的多个目录(但请参阅 通配符效率注意事项)。
- 以下示例中显示了单独的
--properties
标志,以 以提高可读性使用gcloud dataproc clusters create
在 Compute Engine 上创建 Dataproc 时的推荐做法 使用一个--properties
标志指定一个 逗号分隔属性(请参阅 集群属性格式)。
属性:
yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/*/yarn-logs
: 添加此属性可指定 PHS 所在的 Cloud Storage 位置 将访问由作业集群写入的 YARN 日志。spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history
: 添加此属性可启用永久性 Spark 作业历史记录。此属性用于指定 PHS 将访问作业集群编写的 Spark 作业历史记录日志的位置。在 Dataproc 2.0+ 集群中,还必须设置以下两个属性以启用 PHS Spark 历史记录日志(请参阅 Spark 历史记录服务器配置选项)。
spark.history.custom.executor.log.url
值是字面量值,包含由永久性历史记录服务器设置的变量的 {{PLACEHOLDERS}}。这些变量不是由用户设置的;传入如下所示的属性值。--properties=spark:spark.history.custom.executor.log.url.applyIncompleteApplication=false
--properties=spark:spark.history.custom.executor.log.url={{YARN_LOG_SERVER_URL}}/{{NM_HOST}}:{{NM_PORT}}/{{CONTAINER_ID}}/{{CONTAINER_ID}}/{{USER}}/{{FILE_NAME}}
mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done
: 添加此属性可启用永久性的 MapReduce 作业历史记录。 此属性用于指定 PHS 将访问作业集群编写的 MapReduce 作业历史记录日志的 Cloud Storage 位置。dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
:在您之后 配置 Yarn Timeline Service v2, 添加此属性即可使用 PHS 集群查看 YARN 应用时间轴服务 V2 和 Tez 网页界面(请参阅组件网关网页界面)。flink:historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs
: 使用此属性配置 FlinkHistoryServer
,以监控 逗号分隔的目录列表。
属性示例:
--properties=spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history
--properties=mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done
--properties=flink:flink.historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs
创建 Dataproc 作业集群
您可以在本地终端中运行以下命令 Cloud Shell,用于创建 运行作业并将作业历史记录文件写入到的 Dataproc 作业集群 永久性历史记录服务器 (PHS)。
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT \ --region=REGION \ --optional-components=COMPONENT \ --enable-component-gateway \ --properties=PROPERTIES \ other args ...
- CLUSTER_NAME:指定作业集群的名称。
- PROJECT:指定与作业集群关联的项目。
- REGION:指定 Compute Engine 区域 作业集群所在的位置
--enable-component-gateway
:此标志可在作业集群上启用组件网关 Web 界面。- COMPONENT:使用此标志可安装一个或多个
可选组件
集群上指定
FLINK
可选组件 来运行 Flink 作业 集群上 PROPERTIES:添加以下一项或多项内容 集群属性 设置与 PHS 相关的非默认 Cloud Storage 位置和其他作业集群属性。
注意:
- 本部分中的属性值示例使用“*”通配符,以允许 PHS 匹配指定存储桶中由不同作业集群写入的多个目录(但请参阅 通配符效率注意事项)。
- 以下示例中显示了单独的
--properties
标志,以 以提高可读性使用gcloud dataproc clusters create
在 Compute Engine 上创建 Dataproc 时的推荐做法 使用一个--properties
标志指定一个 逗号分隔属性(请参阅 集群属性格式)。
媒体资源:
yarn:yarn.nodemanager.remote-app-log-dir
:默认情况下,Dataproc 作业集群上启用了汇总的 YARN 日志,并将其写入集群临时存储桶。添加此属性可指定另一个 Cloud Storage 位置, 集群将写入汇总日志,以供永久性历史记录服务器访问。--properties=yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/directory-name/yarn-logs
spark:spark.history.fs.logDirectory
和spark:spark.eventLog.dir
: 默认情况下,Spark 作业历史记录文件保存在集群中temp bucket
(位于/spark-job-history
目录中)。您可以通过添加这些属性 存储这些文件的不同 Cloud Storage 位置如果两者 属性,那么它们必须指向同一存储桶中的目录。--properties=spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history
--properties=spark:spark.eventLog.dir=gs://bucket-name/directory-name/spark-job-history
mapred:mapreduce.jobhistory.done-dir
和mapred:mapreduce.jobhistory.intermediate-done-dir
: 默认情况下,MapReduce 作业历史记录文件保存在集群中temp bucket
在/mapreduce-job-history/done
和/mapreduce-job-history/intermediate-done
中 目录。中间mapreduce.jobhistory.intermediate-done-dir
该位置是临时存储空间;系统会将中间文件移到 MapReduce 作业完成时的mapreduce.jobhistory.done-dir
位置。 您可以添加这些属性来指定不同的 Cloud Storage 存储这些文件的位置如果同时使用这两个属性,它们必须指向 目录。--properties=mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory-name/mapreduce-job-history/done
--properties=mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done
spark:spark.history.fs.gs.outputstream.type
和spark:spark.history.fs.gs.outputstream.sync.min.interval.ms
: 添加这些内容 Cloud Storage 连接器 以便更改默认设置 说明作业集群将数据发送到 Cloud Storage 的方式。spark:spark.history.fs.gs.outputstream.type
的默认值为BASIC
:用于将数据发送到 Cloud Storage 。您可以将此设置更改为“FLUSHABLE_COMPOSITE
” 更改刷新行为,以将数据复制到 Cloud Storage 定期更新。 默认--properties=spark:spark.history.fs.gs.outputstream.type=FLUSHABLE_COMPOSITE
spark:spark.history.fs.gs.outputstream.sync.min.interval.ms
。 用于控制将数据传输到 Cloud Storage 的频率; 为5000ms
,可更改为其他ms
时间间隔: 注意:要设置这些属性,Dataproc 作业集群 映像版本必须使用 Cloud Storage 连接器 2.2.0 或更高版本。 您可以从以下位置检查映像版本上安装的连接器版本: Dataproc 映像版本列表页面。--properties=spark:spark.history.fs.gs.outputstream.sync.min.interval.ms=intervalms
dataproc:yarn.atsv2.bigtable.instance
:在您之后 配置 Yarn Timeline Service v2, 添加此属性可将 YARN 时间轴数据写入指定的 用于在 PHS 集群上查看的 Bigtable 实例 YARN 应用时间轴服务 V2 和 Tez 网页界面。 注意:如果 Bigtable 实例创建失败,则集群创建将失败 不存在。--properties=dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
flink:jobhistory.archive.fs.dir
:Flink JobManager 通过将归档作业信息上传到文件系统目录来归档已完成的 Flink 作业。使用此属性可在flink-conf.yaml
。--properties=flink:jobmanager.archive.fs.dir=gs://bucket-name/job-cluster-1/flink-job-history/completed-jobs
将 PHS 与 Spark 批处理工作负载搭配使用
要将永久性历史记录服务器与 Dataproc Serverless 搭配使用,请执行以下操作: Spark 批处理工作负载:
选择或指定 PHS 集群 提交 Spark 批量工作负载。
在 Google Kubernetes Engine 上将 PHS 与 Dataproc 搭配使用
如需将 Persistent History Server 与 Dataproc on GKE 搭配使用,请执行以下操作:
选择或指定 PHS 集群 创建 Dataproc on GKE 虚拟集群。
组件网关网页界面
在 Google Cloud 控制台中 集群页面,点击 PHS 集群名称 以打开集群详情页面。在网页界面标签页下, 选择组件网关链接以打开正在运行的网页界面 。
Spark History Server 网页界面
以下屏幕截图显示了显示链接的 Spark History Server 网页界面
设置为在 job-cluster-1 和 job-cluster-2 上运行 Spark 作业
启动作业集群的 spark.history.fs.logDirectory
和 spark:spark.eventLog.dir
和 PHS 集群的 spark.history.fs.logDirectory
位置,如下所示:
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 History Server 网页界面中按应用名称列出作业,方法是在 在搜索框中输入应用名称。可通过以下方式之一设置应用名称 (按优先级列出):
- 创建 Spark 上下文时在应用代码内设置
- 由 spark.app.name 属性
- 由 Dataproc 设置为作业的完整 REST 资源名称 (
projects/project-id/regions/region/jobs/job-id
)
用户可以在搜索框中输入应用或资源名称字词 来查找和列出作业。
事件日志
Spark History Server 网页界面提供了一个事件日志按钮,您可以 点击即可下载 Spark 事件日志。这些日志适用于检查 Spark 应用的生命周期。
Spark 作业
Spark 应用分为多个作业,这些作业进一步分为多个阶段。每个阶段可能有多个任务,这些任务在执行程序节点(工作器)上运行。
点击网页界面中的 Spark 应用 ID 以打开“Spark 作业”页面,该页面提供了 事件时间轴和应用内招聘信息摘要。
点击某个作业即可打开“作业详情”页面,其中包含有向无环图 (DAG) 以及作业阶段的摘要。
点击某个阶段或使用“阶段”标签页选择一个阶段以打开该阶段 详情页面。
“阶段详情”包括阶段内任务的 DAG 可视化、事件时间轴和指标。您可以使用此页面排查与绞杀任务、调度程序延迟时间和内存不足错误相关的问题。DAG 可视化工具会显示从中派生阶段的代码行,从而帮助您追踪发生问题的代码。
点击“执行器”标签页,以获取有关 Spark 应用的 驱动程序和执行器节点。
本页面上的重要信息包括核心数和每个执行程序上运行的任务数。
Tez Web 界面
Tez 是 Dataproc 上 Hive 和 Pig 的默认执行引擎。 在 Dataproc 作业集群上提交 Hive 作业会启动 Tez 应用(请参阅 在 Dataproc 上使用 Apache Hive )。
如果您配置了 Yarn 时间轴服务 v2
设置 dataproc:yarn.atsv2.bigtable.instance
属性,
创建了 PHS 和 Dataproc 作业集群,YARN 会写入
将生成的 Hive 和 Pig 作业时间轴数据复制到指定的 Bigtable
实例,以便在运行于
PHS 服务器。
YARN 应用时间轴 V2 网页界面
如果您配置了 Yarn 时间轴服务 v2,并在创建 PHS 和 Dataproc 作业集群时设置了 dataproc:yarn.atsv2.bigtable.instance
属性,则 YARN 会将生成的作业时间轴数据写入指定的 Bigtable 实例,以便在 PHS 服务器上运行的 YARN 应用时间轴服务 Web 界面中检索和显示。Dataproc 作业列在流活动下
网页界面
配置 Yarn 时间轴服务 v2
如需配置 Yarn Timeline Service v2,请设置 Bigtable 实例 并根据需要检查服务账号角色,如下所示:
检查服务账号角色(如果需要)。默认 虚拟机服务账号 具有创建和配置 适用于 YARN 时间轴服务的 Bigtable 实例。 如果您使用 自定义虚拟机服务账号时, 该账号必须具有 Bigtable
Administrator
或Bigtable User
角色。
必需的表架构
Dataproc PHS 支持
YARN 时间轴服务 v2
需要使用在 GCP 控制台中创建的特定架构
Bigtable 实例。Dataproc
schema 属性。
dataproc:yarn.atsv2.bigtable.instance
属性设置为指向
Bigtable 实例。
以下是必需的 Bigtable 实例架构:
Tables | 列族 |
---|---|
prod.timelineservice.application | c,i,m |
prod.timelineservice.app_flow | m |
prod.timelineservice.entity | c,i,m |
prod.timelineservice.flowactivity | i |
prod.timelineservice.flowrun | i |
prod.timelineservice.subapplication | c,i,m |
Bigtable 垃圾回收
您可以为实例配置基于存在时间的 Bigtable 垃圾回收 ATSv2 表:
安装 cbt、 (包括创建
.cbrtc file
)。创建 ATSv2 基于存在时间的垃圾回收政策:
export NUMBER_OF_DAYS = number \ cbt setgcpolicy prod.timelineservice.application c maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.application i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.application m maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.app_flow m maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.entity c maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.entity i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.entity m maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.flowactivity i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.flowrun i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.subapplication c maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.subapplication i maxage=${NUMBER_OF_DAYS} \ cbt setgcpolicy prod.timelineservice.subapplication m maxage=${NUMBER_OF_DAYS}
注意:
NUMBER_OF_DAYS:最长天数为 30d
。