我正在尝试在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类?
我还开发了一个自定义log4jappender类,并在我的log4j.properties文件中使用如下,没有问题:
log4j.rootLogger=ERROR, defaultLog
log4j.appender.defaultLog=com.my.package.CustomLog4jFileAppender
所以我的猜测是这行代码"log4j.appender.S": "CustomLog4JAppender"不足以找到你的自定义appender,你可能需要给出自定义appender类的位置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。