开发者社区> 问答> 正文

在AWS EMR中运行spark时,请使用自定义Log4J appender

我正在尝试在AWS EMR中执行spark submit来执行一个使用我编写的自定义log4j appender的简单项目。
我可以通过在群集软件设置中提供以下配置来传递我的log4j属性:

[{

"classification": "spark-log4j",
"properties": {
    "log4j.appender.S": "CustomLog4JAppender",
    "log4j.rootLogger": "DEBUG,S"
}

}
]

但是当我运行集群步骤时,我得到:
log4j:ERROR无法实例化类[CustomLog4JAppender]。java.lang.ClassNotFoundException:
集群stderr中的CustomLog4JAppender。

我正在执行的jar位于S3中,它包含Main类,我的appender类和所有依赖项。

我正在使用:command-runner.jar执行集群
并执行以下命令:
spark-submit --deploy-mode client --class Main s3:// {path_to_jar} .jar

这里有几个问题:

集群中的哪个组件加载log4j记录器和属性?它是否发生在主节点中?在核心节点?
我该怎么做才能解决这个问题?我该如何以不同的方式执行它?如何让它识别我的自定义appender类?

展开
收起
社区小助手 2018-12-12 18:16:08 2306 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    我还开发了一个自定义log4jappender类,并在我的log4j.properties文件中使用如下,没有问题:

    log4j.rootLogger=ERROR, defaultLog
    log4j.appender.defaultLog=com.my.package.CustomLog4jFileAppender
    所以我的猜测是这行代码"log4j.appender.S": "CustomLog4JAppender"不足以找到你的自定义appender,你可能需要给出自定义appender类的位置。

    2019-07-17 23:20:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载