【问题标题】:How to run a java program on Apache Spark Cluster?如何在 Apache Spark 集群上运行 java 程序?
【发布时间】:2014-05-23 08:52:59
【问题描述】:

我按照教程https://spark.apache.org/docs/0.8.1/quick-start.html 中的“Java 中的独立应用程序”部分进行操作

这部分按预期工作

$ mvn package
$ mvn exec:java -Dexec.mainClass="SimpleApp"
...
Lines with a: 46, Lines with b: 23

如何在集群上并行运行同一个类?如果我能通过这一步,我将使用 HDFS 数据作为输入。 是否可以使用以下参数运行此 SimpleApp.java:

./run-example <class> <params>

【问题讨论】:

    标签: java apache-spark


    【解决方案1】:

    我建议您在 IDE 中编写简单的 Java 或 Scala 类。在“SimpleApp.java”中创建 SparkConf 和 SparkContext 对象。

    SparkConf conf = new SparkConf().setAppName(appName).setMaster("local[2]");
    JavaSparkContext sc = new JavaSparkContext(conf);
    

    一旦您运行maven clean packagemaven 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。你的 cmd 看起来像这样。

    spark-1.4.0-bin-hadoop2.6>
    

    使用以下命令启动 master 和 worker。

    spark-1.4.0-bin-hadoop2.6> ./sbin/start-all.sh
    

    如果这不起作用,则分别启动 master 和 slave。

    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,所以我的程序将在两个线程上运行,但您可以在 --master 中将 master URL 作为--master spark://YOUR-HOSTNAME:7077 传递给

    端口号 7077 是主 URL 的默认端口号。

    【讨论】:

    • 但是 master 如何知道 slave 的位置/配置,因为两者都是独立的 start-master.shstart-slaves.sh shell 脚本?我们在哪里指定所需的奴隶数量?
    【解决方案2】:

    我不使用 mvn 运行它们,我只是构建一个 fat jar,将其 scp 到集群,然后运行:

    java -cp /path/to/jar.jar com.yourcompany.yourpackage.YourApp some arguments
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2017-04-16
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    相关资源
    最近更新 更多