我已经为spark编写了一个java程序,但我无法从命令行运行它。
我已按照快速入门指南中给出的步骤操作,但我收到以下错误消息。请帮我解决这个问题。
这是错误:
hadoopnod@hadoopnod:~/spark-1.2.1/bin$ ./run-example "SimpleApp " --master local /home/hadoopnod/Spark_Java/target/simple-project-1.0.jarjava.lang.ClassNotFoundException: org.apache.spark.examples.SimpleApp
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:342)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
答案 0 :(得分:4)
使用以下命令创建JAR文件。您可以在“target / classes”文件夹中找到SimpleApp.class文件。 cd到这个目录。
jar cfve file.jar SimpleApp.class
将此JAR文件放入目标目录中的项目中。 此JAR文件包含将作业提交给Spark时SimpleApp类的依赖关系。
cd到你的spark目录。我正在使用spark-1.4.0-bin-hadoop2.6。你的cmd看起来像这样。
spark-1.4.0-bin-hadoop2.6>
使用Spark Submit提交您的spark程序。如果你有像Harsha在另一个答案中解释过的结构那么提供
--class org.apache.spark.examples.SimpleApp
其他
--class SimpleApp
最后提交你的火花程序。
spark-1.4.0-bin-hadoop2.6>./bin/spark-submit --class SimpleApp --master local[2] /home/hadoopnod/Spark_Java/target/file.jar
答案 1 :(得分:0)
脚本./run-example.sh
用于执行分发中包含的示例。要运行示例“SparkPi”,请执行此操作...
> cd /apps/spark-1.2.0
> ./bin/run-example SparkPi
如果你看看这个脚本如何执行它只是一个实际调用spark-submit
的新用户友好包装器。
这是一个从上面执行相同“SparkPi”示例但使用spark-submit
> .bin/spark-submit --class org.apache.spark.examples.SparkPi --master local examples/target/spark-examples_2.10-1.2.0.jar
您应该使用spark-submit
来运行自己的代码。
答案 2 :(得分:0)
ClassNotFoundException: org.apache.spark.examples.SimpleApp
从上面的错误中可以清楚地看出它无法找到您要执行的类。您是否已将Java项目捆绑到jar文件中。如果在创建jar文件时有任何其他依赖项,则还需要包含它们。
假设你有一个像这样的项目结构
simpleapp
- src/main/java
- org.apache.spark.examples
-SimpleApp.java
- lib
- dependent.jars (you can put all dependent jars inside lib directory)
- target
- simpleapp.jar (after compiling your source)
您可以使用任何构建工具或任何IDE将源捆绑到Jar文件中。之后,如果您已将spark / bin目录添加到路径中。您可以从项目目录执行以下命令。只有在SimpleApp.java中有依赖库时才需要添加--jars $(echo lib / * .jar | tr''',')
spark-submit --jars $(echo lib/*.jar | tr ' ' ',' ) --class org.apache.spark.examples.SimpleApp --master local[2] target/simpleapp.jar
答案 3 :(得分:0)
我有同样的问题。如果要使用Spark Quickstart提供的命令,请确保您的项目具有相同的体系结构:
find .
./pom.xml
./src
./src/main
./src/main/java
./src/main/java/SimpleApp.java
可能情况并非如此,但我的pom.xml构建了我的架构,如
./src/main/java/myGroupId/myArtifactId/SimpleApp.java
我在默认包中移动了我的课程,之后工作正常。