繁体   English   中英

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

[英]Run time Application Logging during spark execution

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

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

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

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

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

我可以想到的是,在这方面您可以做的事情很少。

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

我之前尝试过的另一件事是使用Accumulators来大致跟踪进度以及已写入的数据量。 这样做行得通,但是当Spark用执行者提供的信息更新可见总数时,这有点武断,因此我发现它通常对于此目的没有太大帮助。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM