我正在尝试在AWS EMR中执行spark提交以执行一个简单项目,该项目使用我编写的自定义log4j附加程序。
通过在群集软件设置中提供以下配置,我无法传递我的log4j属性:
[{
"classification": "spark-log4j",
"properties": {
"log4j.appender.S": "CustomLog4JAppender",
"log4j.rootLogger": "DEBUG,S"
}
}
]
但是当我运行集群步骤时,我得到了:
log4j:ERROR无法实例化类[CustomLog4JAppender]。 java.lang.ClassNotFoundException:CustomLog4JAppender
在群集stderr中。
我正在执行的jar位于S3中,它包含Main类,appender类和所有依赖项。
我正在使用以下命令执行集群:command-runner.jar
并执行以下命令:
火花提交-部署模式客户端-类Main s3:// {path_to_jar} .jar
这里有几个问题:
谢谢!
答案 0 :(得分:0)
我还开发了一个自定义的log4j
附加程序类,并在我的log4j.properties
文件中按如下方式使用了它,没问题:
log4j.rootLogger=ERROR, defaultLog
log4j.appender.defaultLog=com.my.package.CustomLog4jFileAppender
因此,我的猜测是这行代码"log4j.appender.S": "CustomLog4JAppender"
不足以定位自定义追加程序,您可能需要提供自定义追加程序类的位置。试试这个:
"log4j.appender.S": "com.yourPackage.CustomLog4JAppender",