作业输出和日志

提交 Managed Service for Apache Spark 作业后, Managed Service for Apache Spark 会自动收集 作业输出,并将其提供给您。这意味着,您可以快速查看作业输出,而无需在作业运行时保持与集群的连接,或查看复杂的日志文件。

Spark 日志

Spark 日志有两种类型:Spark 驱动程序日志和 Spark 执行器日志。 Spark 驱动程序日志包含作业输出;Spark 执行器日志包含作业可执行文件或启动器输出(例如 spark-submit“Submitted application ...”消息),有助于调试作业失败问题。

Managed Service for Apache Spark 作业驱动程序(与 Spark 驱动程序不同)是许多作业类型的启动器。在启动 Spark 作业时,它会作为底层 spark-submit 可执行文件的封装容器运行,该可执行文件可启动 Spark 驱动程序。Spark 驱动程序在 Spark clientcluster 模式下在 Managed Service for Apache Spark 集群上运行作业:

  • client 模式:Spark 驱动程序在 spark-submit 进程中运行作业,Spark 日志会发送到 Managed Service for Apache Spark 作业驱动程序。

  • cluster 模式:Spark 驱动程序在 YARN 容器中运行作业。Managed Service for Apache Spark 作业驱动程序无法使用 Spark 驱动程序日志。

Managed Service for Apache Spark 和 Spark 作业属性概览

属性 默认值 说明
dataproc:dataproc.logging.stackdriver.job.driver.enable true 或 false false 必须在创建集群时设置。值为 true 时,作业驱动程序输出位于 Logging 中,与作业资源相关联;值为 false 时,作业驱动程序输出不在 Logging 中。
注意:如需在 Logging 中启用作业驱动程序日志,还需要设置以下集群属性,这些属性会在创建集群时默认设置:dataproc:dataproc.logging.stackdriver.enable=truedataproc:jobs.file-backed-output.enable=true
dataproc:dataproc.logging.stackdriver.job.yarn.container.enable true 或 false false 必须在创建集群时设置。 值为 true 时,作业 YARN 容器日志会与作业资源相关联;值为 false 时,作业 YARN 容器日志会与集群资源相关联。
spark:spark.submit.deployMode client 或 cluster 客户端 控制 Spark clientcluster 模式。

使用 Managed Service for Apache Spark jobs API 提交的 Spark 作业

本部分中的表列出了在通过 Managed Service for Apache Spark jobs API 提交作业(包括通过 Google Cloud 控制台、gcloud CLI 和 Cloud 客户端库提交作业)时,不同的属性设置对 Managed Service for Apache Spark 作业驱动程序输出目标位置的影响。

创建集群时,可以使用 --properties 标志设置列出的 Managed Service for Apache Spark 和 Spark 属性 ,这些属性会应用于在集群上运行的所有 Spark 作业;在作业提交到 Managed Service for Apache Spark jobs API 后,也可以使用 --properties 标志(不带“spark:”前缀)设置 Spark 属性,这些属性仅应用于该作业。

Managed Service for Apache Spark 作业驱动程序输出

下表列出了不同的属性设置对 Managed Service for Apache Spark 作业驱动程序输出目标位置的影响。

dataproc:
dataproc.logging.stackdriver.job.driver.enable
输出
false(默认)
  • 已流式传输到客户端
  • 位于 Cloud Storage 中 Managed Service for Apache Spark 生成的 driverOutputResourceUri
  • 不在 Logging 中
true
  • 已流式传输到客户端
  • 位于 Cloud Storage 中 Managed Service for Apache Spark 生成的 driverOutputResourceUri
  • 在 Logging 中的作业资源下:dataproc.job.driver

Spark 驱动程序日志

下表列出了不同的属性设置对 Spark 驱动程序日志目标位置的影响。

spark:
spark.submit.deployMode
dataproc:
dataproc.logging.stackdriver.job.driver.enable
dataproc:
dataproc.logging.stackdriver.job.yarn.container.enable
驱动程序输出
客户端 false(默认) true 或 false
  • 已流式传输到客户端
  • 位于 Cloud Storage 中 Managed Service for Apache Spark 生成的 driverOutputResourceUri
  • 不在 Logging 中
客户端 true true 或 false
  • 已流式传输到客户端
  • 位于 Cloud Storage 中 Managed Service for Apache Spark 生成的 driverOutputResourceUri
  • 在 Logging 中的作业资源下:dataproc.job.driver
集群 false(默认) false
  • 未流式传输到客户端
  • 不在 Cloud Storage 中
  • 在 Logging yarn-userlogs 中的集群资源下
集群 true true
  • 未流式传输到客户端
  • 不在 Cloud Storage 中
  • 在 Logging dataproc.job.yarn.container 中的作业资源下

Spark 执行器日志

下表列出了不同的属性设置对 Spark 执行器日志目标位置的影响。

dataproc:
dataproc.logging.stackdriver.job.yarn.container.enable
执行器日志
false(默认) 在 Logging yarn-userlogs 中的集群资源下
true 在 Logging 中的作业资源下:dataproc.job.yarn.container

不使用 Managed Service for Apache Spark jobs API 提交的 Spark 作业

本部分列出了在不使用 Managed Service for Apache Spark jobs API 提交作业(例如,使用 spark-submit 直接在集群节点上提交作业,或者使用 Jupyter 或 Zeppelin 笔记本)时,不同的属性设置对 Spark 作业日志目标位置的影响。这些作业没有 Managed Service for Apache Spark 作业 ID 或驱动程序。

Spark 驱动程序日志

下表列出了不同的属性设置对不通过 Managed Service for Apache Spark jobs API 提交的作业的 Spark 驱动程序日志目标位置的影响。

spark:
spark.submit.deployMode
驱动程序输出
客户端
  • 已流式传输到客户端
  • 不在 Cloud Storage 中
  • 不在 Logging 中
集群
  • 未流式传输到客户端
  • 不在 Cloud Storage 中
  • 在 Logging yarn-userlogs 中的集群资源下

Spark 执行器日志

如果 Spark 作业不通过 Managed Service for Apache Spark jobs API 提交,则执行器日志位于 Logging 中的集群资源下:yarn-userlogs

查看作业输出

您可以在 Google Cloud 控制台、 gcloud CLI、Cloud Storage 或 Logging 中访问 Managed Service for Apache Spark 作业输出。

控制台

如需查看作业输出,请前往项目的 Managed Service for Apache Spark 作业 部分,然后点击 任务 ID 以查看作业输出。

如果作业正在运行,则作业输出会定期刷新以显示 新内容。

gcloud 命令

当您使用 gcloud dataproc jobs submit 命令提交作业时,作业输出会显示在控制台上。通过将作业 ID 传递给 gcloud dataproc jobs wait 命令,您可以稍后在其他计算机上或在新窗口中“重新加入”输出。作业 ID 是 GUID,例如 5c1754a5-34f7-4553-b667-8a1199cb9cab。示例如下:

gcloud dataproc jobs wait 5c1754a5-34f7-4553-b667-8a1199cb9cab \
    --project my-project-id --region my-cluster-region
Waiting for job output...
... INFO gcs.GoogleHadoopFileSystemBase: GHFS version: 1.4.2-hadoop2
... 16:47:45 INFO client.RMProxy: Connecting to ResourceManager at my-test-cluster-m/
...

Cloud Storage

作业输出存储在 Cloud Storage 中的暂存存储桶或创建集群时指定的存储桶中。以下项返回的 Job.driverOutputResourceUri 字段中提供了 Cloud Storage 中作业输出的链接:

  • jobs.get API 请求。
  • gcloud dataproc jobs describe job-id 命令。
    $ gcloud dataproc jobs describe spark-pi
    ...
    driverOutputResourceUri: gs://dataproc-nnn/jobs/spark-pi/driveroutput
    ...
    

日志记录

如需了解如何在 Logging 中查看 Managed Service for Apache Spark 作业输出,请参阅 Managed Service for Apache Spark 日志