我在运行spark应用程序时遇到了一个奇怪的问题。对于我的应用程序(spark和non spark),我们编写了一个自定义的JsonLogLayout来记录Json格式的消息。
使用以下命令运行spark作业时,日志将以JSON格式编写。到目前为止一切顺利
spark-submit --verbose --files“/tmp/log4j.properties” --driver-java-options“-Dconf.dir = / etc / myapp / conf -Dlog4j.configuration =文件:///tmp/log4j.properties“
--conf“spark.driver.extraJavaOptions = -Dconf.dir = / etc / myapp / conf -Dlog4j.configuration = file:///tmp/log4j.properties” --class myapp.TestSpark.TestApp target / TestSpark-0.0.1-SNAPSHOT-jar-with-dependencies.jar
由于我们的环境是安全的,我们使用kerberos,我需要将 keytab和主要信息传递给spark工作。所以现在命令如下
spark-submit --verbose --files“/tmp/log4j.properties”--driver-java-options“-Dconf.dir = / etc / myapp / conf -Dlog4j.configuration = file:/// tmp /log4j.properties” --conf“spark.driver.extraJavaOptions = -Dconf.dir = / etc / myapp / conf -Dlog4j.configuration = file:///tmp/log4j.properties”--keytab /etc/security/keytabs/application.keytab --principal myapp_runtime@MYAPP.DEV.TEST.COM --class myapp.TestSpark.TestApp target / TestSpark-0.0.1-SNAPSHOT-jar-with-dependencies.jar
从这里火花工作开始失败。我收到了以下错误
` java.lang.ClassNotFoundException: myapps.custom.layout.JsonLogLayout
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.log4j.helpers.Loader.loadClass(L`
我不确定为什么火花会引发此错误,我该如何解决?