Spark执行期间的运行时应用程序日志记录

时间:2018-06-25 12:12:41

标签: apache-spark

我有一个使用Scala语言为Spark编写的应用程序。我的应用程序代码已经准备就绪,工作可以运行大约10-15分钟。

在运行Spark作业时,还需要提供应用程序执行状态的附加要求。我知道spark以惰性方式运行,并且在spark执行期间将数据取回驱动程序是不好的。通常,我会对定期提供状态感兴趣。

例如。如果在spark应用程序中配置了20个功能点,那么我想提供这些功能点中每个功能点的状态,以及它们在Spark执行期间何时执行/或步骤结束。

这些功能点的传入状态将被带到一些自定义的用户界面以显示作业的状态。

有人可以给我一些如何实现这一目标的指示。

1 个答案:

答案 0 :(得分:0)

在这方面,我能想到的事情很少。

如果作业包含多个操作,则可以编写脚本以轮询这些操作的预期输出。例如,假设您的脚本有4个不同的 DataFrame 保存调用。您可以让状态脚本轮询 HDFS / S3 ,以查看数据是否已显示在预期的输出位置。另一个示例,我使用Spark索引到 ElasticSearch ,并且编写了状态日志以轮询索引中有多少记录以打印定期进度。

我之前尝试过的另一件事是使用累加器来大致了解进度以及已写入的数据量。这样做行得通,但是当Spark用执行者提供的信息更新可见总数时,这有点武断,所以我发现通常来说,这样做对您没有太大帮助。

您可以采取的另一种方法是直接轮询Spark的状态和指标API。您将能够将支持Spark UI的所有信息提取到代码中,并根据需要进行处理。它不一定会告诉您驱动程序代码中的确切位置,但是如果您手动确定驱动程序如何映射到阶段,则可以知道。作为参考,以下是有关轮询状态API的文档:

https://spark.apache.org/docs/latest/monitoring.html#rest-api