Dataproc 的 Persistent History Server

概览

Dataproc 永久历史记录服务器 (PHS) 提供用于查看作业历史记录的网页界面 在活跃或已删除的 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 所在的 Cloud Storage 位置 将访问作业集群写入的 MapReduce 作业历史记录日志。

    • 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:此标志用于启用 组件网关 网页界面
  • 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 搭配使用

要将永久性历史记录服务器与 GKE 上的 Dataproc

  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 网页界面

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 设置 dataproc:yarn.atsv2.bigtable.instance 属性, 创建了 PHS 和 Dataproc 作业集群,YARN 会写入 将生成的作业时间轴数据发送到指定的 Bigtable 实例,以供检索和 YARN 应用时间轴服务网页界面上的 PHS 服务器。Dataproc 作业列在流活动下 网页界面

配置 Yarn 时间轴服务 v2

如需配置 Yarn Timeline Service v2,请设置 Bigtable 实例 并根据需要检查服务账号角色,如下所示:

  1. 创建 Bigtable 实例

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

必需的表架构

Dataproc PHS 支持 YARN 时间轴服务 v2 需要使用在 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