Dataproc 的 Persistent History Server

概览

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 集群所在的项目中。

  • PHS 集群不支持 Kerberos个人身份验证

创建 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 应用时间轴服务 V2Tez 网页界面(请参阅组件网关网页界面)。

    • flink:historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs: 使用此属性配置 Flink HistoryServer,以监控 逗号分隔的目录列表。

    属性示例

    --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.logDirectoryspark: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-dirmapred: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.typespark: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 时间间隔:
      --properties=spark:spark.history.fs.gs.outputstream.sync.min.interval.ms=intervalms
      
      注意:要设置这些属性,Dataproc 作业集群 映像版本必须使用 Cloud Storage 连接器 2.2.0 或更高版本。 您可以从以下位置检查映像版本上安装的连接器版本: Dataproc 映像版本列表页面。
    • dataproc:yarn.atsv2.bigtable.instance:在您之后 配置 Yarn Timeline Service v2, 添加此属性可将 YARN 时间轴数据写入指定的 用于在 PHS 集群上查看的 Bigtable 实例 YARN 应用时间轴服务 V2Tez 网页界面。 注意:如果 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 批处理工作负载:

  1. 创建 PHS 集群

  2. 选择或指定 PHS 集群 提交 Spark 批量工作负载

在 Google Kubernetes Engine 上将 PHS 与 Dataproc 搭配使用

如需将 Persistent History Server 与 Dataproc on GKE 搭配使用,请执行以下操作:

  1. 创建 PHS 集群

  2. 选择或指定 PHS 集群 创建 Dataproc on GKE 虚拟集群

组件网关网页界面

在 Google Cloud 控制台中 集群页面,点击 PHS 集群名称 以打开集群详情页面。在网页界面标签页下, 选择组件网关链接以打开正在运行的网页界面 。

Spark History Server 网页界面

以下屏幕截图显示了显示链接的 Spark History Server 网页界面 设置为在 job-cluster-1 和 job-cluster-2 上运行 Spark 作业 启动作业集群的 spark.history.fs.logDirectoryspark: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 网页界面中按应用名称列出作业,方法是在 在搜索框中输入应用名称。可通过以下方式之一设置应用名称 (按优先级列出):

  1. 创建 Spark 上下文时在应用代码内设置
  2. spark.app.name 属性
  3. 由 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 实例 并根据需要检查服务账号角色,如下所示:

  1. 创建 Bigtable 实例

  2. 检查服务账号角色(如果需要)。默认 虚拟机服务账号 具有创建和配置 适用于 YARN 时间轴服务的 Bigtable 实例。 如果您使用 自定义虚拟机服务账号时, 该账号必须具有 Bigtable AdministratorBigtable 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