【发布时间】:2020-08-04 22:45:21
【问题描述】:
这个问题与 Apache Spark 本身一样老,但仍然没有一个解决方案对我有帮助。 我有以下类声明:
object Main {
def main(args: Array[String]): Unit = {
...
}
类引用是 org.griat.rcse.Main(在 IntelliJ 中是 ctrl+shift+alt+c),同样留在pom.xml:
<groupId>org.griat.rcse</groupId>
我尝试运行它的方式:
spark-submit --master yarn --deploy-mode client --class org.griat.rcse.Main Glonass112-1.0-SNAPSHOT.jar
一旦它工作了,但在代码中发现了一个异常。在我修复它之后,我cleaned 和packaged 它。虽然pom.xml 没有改变(以及路径和类名),但它停止向 Spark 提交,显示ClassNotFoundException:
java.lang.ClassNotFoundException: org.griat.rcse.Main
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:238)
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:810)
at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我还添加了maven-jar-plugin,并不是说它会有所帮助:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.griat.rcse.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
这种黑魔法的来源是什么,我该如何处理?
【问题讨论】:
-
确保主类在正确的目录中,或者你可以尝试使用其他插件,如
Maven Assembly Plugin,你也可以从项目的根目录添加所有maven内容和主类的位置吗? -
你能分享你完整的 pom.xml 吗?
标签: scala apache-spark