【发布时间】:2017-12-12 22:10:06
【问题描述】:
我在 Amazon EMR 集群上触发提交作业。我希望将所有火花日志记录发送到 redis/logstash。在 EMR 下配置 spark 的正确方法是什么?
保留 log4j:添加引导操作以修改 /home/hadoop/spark/conf/log4j.properties 以添加附加程序?然而,这个文件已经包含了很多东西,并且是一个指向 hadoop conf 文件的符号链接。我不想过多地摆弄它,因为它已经包含一些 rootLoggers。哪个 appender 做得最好? ryantenney/log4j-redis-appender + logstash/log4j-jsonevent-layout 或 pavlobaron/log4j2redis ?
迁移到 slf4j+logback:从 spark-core 中排除 slf4j-log4j12,添加 log4j-over-slf4j ...并使用带有 com.cwbase.logback.RedisAppender 的 logback.xml?看起来这会对依赖项造成问题。它会隐藏 log4j.properties 中已经定义的 log4j.rootLoggers 吗?
还有什么我错过的吗?
您对此有何看法?
更新
看起来我无法获得第二个工作选项。运行测试很好,但使用 spark-submit(使用 --conf spark.driver.userClassPathFirst=true)总是以可怕的“在类路径上检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar ”结束,抢占 StackOverflowError。”
【问题讨论】:
-
我正要走 log4j-over-slf4j 路线。我想你为我节省了一些时间。
-
我认为没有办法解决它,因为它会与我们的 fat-jar 一起加载 spark 二进制文件,而 spark 使用 slf4j-log4j12。我今天一直在尝试各种事情来让它发挥作用,但没有成功。如果您仍然想试一试,请随时告诉我您的发现。
-
有什么办法可以解决这个问题?像storm和spark这样的主要库都包含一个默认库。
标签: apache-spark log4j slf4j logback