我遵循了教程的“Java 中的独立应用程序”部分 https://spark.apache.org/docs/0.8.1/quick-start.html
这部分按预期工作
$ mvn package
$ mvn exec:java -Dexec.mainClass="SimpleApp"
...
Lines with a: 46, Lines with b: 23
如何在集群上并行运行同一个类?如果我能通过这一步,我将使用 HDFS 数据作为输入。 是否可以使用如下参数运行此 SimpleApp.java:
./run-example <class> <params>
最佳答案
我建议您在 IDE 中编写简单的 Java 或 Scala 类。在“SimpleApp.java”中创建 SparkConf 和 SparkContext 对象。
SparkConf conf = new SparkConf().setAppName(appName).setMaster("local[2]");
JavaSparkContext sc = new JavaSparkContext(conf);
一旦运行maven clean package
或maven package
,它将在项目的目标文件夹中创建jar文件。如果没有,则使用以下命令创建 JAR 文件。您可以在“target/classes”文件夹中找到SimpleApp.class文件。 cd 到此目录。
jar cfve file.jar SimpleApp.class
将此 JAR 文件放入您的项目的目标目录中。此 JAR 文件包含将作业提交到 Spark 时 SimpleApp 类的依赖项。我猜你的项目结构如下。
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)
cd 到您的 Spark 目录。我使用的是spark-1.4.0-bin-hadoop2.6。你的命令看起来像这样。
spark-1.4.0-bin-hadoop2.6>
使用以下命令启动master和worker。
spark-1.4.0-bin-hadoop2.6> ./sbin/start-all.sh
如果这不起作用,则分别启动主服务器和从服务器。
spark-1.4.0-bin-hadoop2.6> ./sbin/start-master.sh
spark-1.4.0-bin-hadoop2.6> ./sbin/start-slaves.sh
使用 Spark Submit 提交您的 Spark 程序。如果你有像我解释的那样的结构,那么在类中传递这个参数。
--class org.apache.spark.examples.SimpleApp
其他
--class SimpleApp
最后通过spark Submit提交你的spark程序。
spark-1.4.0-bin-hadoop2.6>./bin/spark-submit --class SimpleApp --master local[2] /PATH-TO-YOUR-PROJECT-DIRECTORY/target/file.jar
在这里,我使用 local[2] 作为主,因此我的程序将在两个线程上运行,但您可以在 --master 中将主 URL 作为 --master Spark 传递://您的主机名:7077
端口号 7077 是主 URL 的默认端口号。
关于java - 如何在 Apache Spark 集群上运行 java 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22974661/