我们有多个Apache Spark作业,我们需要记录一些执行任务的事件和参数,以便进行调试和故障排除。
记录Apache Spark作业代码的做法是什么?
显而易见的解决方案是:使用Spark的loginfo(和其他方法,虽然不推荐),一些日志框架(如log4s)或简单的println。
在我的Java开发人员背景下,我觉得直接将日志写入控制台是一种不好的做法。我们总是使用日志框架。
但是,如果我们选择println日志记录作为spark作业,我们就能够简单地将日志收集到文件中,例如,从起始shell脚本重定向到文件。而且,我们可以在spark管理控制台中看到输出。
所以我不知道使用log4s获得的利润。 你能用println分享利弊来记录火花作业吗?
答案 0 :(得分:1)
Spark使用log4j作为自己日志记录的标准库。 Spark内部发生的一切都会记录到shell控制台和配置的底层存储中。 Spark还为应用程序编写者提供了一个模板,因此我们可以使用samelog4j库将我们想要的任何消息添加到Spark的现有和就地实现中。
请查看this。
对于使用或不使用println进行登录,根据我的个人经验,我会说不参考this链接。
作业完成后,您可以使用作业历史记录服务器中的YARN收集日志。有关更详细的答案,请查看this
答案 1 :(得分:0)
我建议你直接使用Log4J。您可以在代码中添加DEBUG级别,INFO级别和ERROR级别的记录器。并且可以使用一些最佳的日志记录实践,如
1)用于记录所有级别日志的单独路径。
2)记录的滚动策略
3)记录与否的必需包。就像我的情况一样,我在AWS上使用Spark,因此我还启用S3相关日志来监控它正在扫描或处理的文件或文件夹。等