Google Cloud Logging 中 Dataproc Spark 作业的输出

Output from Dataproc Spark job in Google Cloud Logging

有没有办法将 Dataproc Spark 作业的输出发送到 Google 云日志记录? As explained in the Dataproc docs 作业驱动程序(Spark 作业的主驱动程序)的输出在控制台的 Dataproc->Jobs 下可用。我也希望在 Cloud Logging 中拥有日志的原因有两个:

  1. 我想查看执行者的日志。主日志通常会说 "executor lost" 而没有进一步的细节,如果能获得有关执行程序正在做什么的更多信息将非常有用。
  2. Cloud Logging 具有很好的过滤和搜索功能

目前 Cloud Logging 中显示的 Dataproc 的唯一输出是来自 yarn-yarn-nodemanager-* 和 container_*.stderr 的日志项。我的应用程序代码的输出显示在 Dataproc->Jobs 中,但不显示在 Cloud Logging 中,而且它只是 Spark master 的输出,而不是 executors 的输出。

tl;dr

目前不支持此功能,但 Cloud Dataproc 的未来版本将支持此功能。也就是说,在此期间有一个手动解决方法。

解决方法

Cloud Dataproc 集群使用 fluentd 收集日志并将其转发到 Cloud Logging。 fluentd 的配置是您看到转发了一些日志而不是其他日志的原因。因此,简单的解决方法(在 Cloud Dataproc 支持 Cloud Logging 中的作业详细信息之前)是修改 flientd 配置。集群上 fluentd 的配置文件位于:

/etc/google-fluentd/google-fluentd.conf

有两件事可以收集额外的详细信息,这将是最简单的:

  1. 根据您的需要添加新的fluentd plugin
  2. 将新文件添加到已收集的现有文件列表中(第 56 行包含我的集群上的文件)

编辑配置后,您需要重新启动 google-fluentd 服务:

/etc/init.d/google-fluentd restart

最后,根据您的需要,您可能需要也可能不需要在集群的所有节点上执行此操作。根据您的用例,听起来您可能只需更改主节点并进行设置。

您可以为此使用 dataproc initialization actions for stackdriver

gcloud dataproc clusters create <CLUSTER_NAME> \
    --initialization-actions gs://<GCS_BUCKET>/stackdriver.sh \
    --scopes https://www.googleapis.com/auth/monitoring.write