在Amazon EMR集群上将apache-spark loggin发送到redis/logstash的最佳方法

Mic*_*may 8 log4j logback slf4j apache-spark

我在Amazon EMR集群上提交作业.我想将所有火花记录发送到redis/logstash.在EMR下配置spark的正确方法是什么?

  • 保持log4j:添加一个bootstrap动作来修改/home/hadoop/spark/conf/log4j.properties来添加一个appender?但是,这个文件已经包含了很多东西,并且是hadoop conf文件的符号链接.我不想过多地使用它,因为它已经包含了一些rootLogger.哪个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."

Jor*_*ado -1

我会在集群上为此设置一个额外的守护进程。