我想为我的Scala Spark应用程序运行spark-submit。这些是我做的步骤:
1)从IntellijIDEA执行Maven Clean和Package以获取myTest.jar 2)执行以下spark-submit命令:
spark-submit --name 28 --master local[2] --class org.test.consumer.TestRunner \
/usr/tests/test1/target/myTest.jar \
$arg1 $arg2 $arg3 $arg4 $arg5
这是我要运行的TestRunner
对象:
package org.test.consumer
import org.test.consumer.kafka.KafkaConsumer
object TestRunner {
def main(args: Array[String]) {
val Array(zkQuorum, group, topic1, topic2, kafkaNumThreads) = args
val processor = new KafkaConsumer(zkQuorum, group, topic1, topic2)
processor.run(kafkaNumThreads.toInt)
}
}
但是spark-submit
命令失败并显示以下消息:
java.lang.ClassNotFoundException: org.test.consumer.TestRunner
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:225)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:686)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
我真的不明白为什么无法找到对象TestRunner
,如果正确指定了包...是否与使用object
而不是{{1}有关}?
更新
项目结构(文件夹class
目前标记为来源):
scala
的pom.xml
/usr/tests/test1
.idea
src
main
docker
resources
scala
org
test
consumer
kafka
KafkaConsumer.scala
TestRunner.scala
test
target
答案 0 :(得分:1)
@FiofanS,问题出在您的目录结构中。
Maven使用convention over configuratation
政策。这意味着,默认情况下,maven希望您遵循它定义的规则集。例如,它希望您将所有代码放在src/main/java
目录中(请参阅Maven Standard Directory Structure)。但是您没有src/main/java
目录中的代码。相反,您可以在src/main/scala
目录中找到它。默认情况下,maven不会将src/main/scala
视为源位置。
虽然,maven希望您遵循它定义的规则,但它不会强制执行它们。它还为您提供了根据您的偏好配置内容的方法
在您的情况下,您必须明确指示maven将src/main/scala
也视为您的源位置之一。
为此,您必须使用Maven Build Helper Plugin 在pom.xml
中的<project>...</project>
标记内添加以下代码
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/main/scala</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
这可以解决您的问题。