如何在独立运行Apache spark Java程序

时间:2015-02-19 09:39:43

标签: apache-spark

我已经为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

4 个答案:

答案 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

我在默认包中移动了我的课程,之后工作正常。