用java提交一个Spark应用程序

本文介绍两种使用Java代码提交Spark应用程序的方法。第一种方法通过创建MyLauncher类并利用SparkLauncher API来提交应用程序,同时提供监控机制;第二种方法则通过启动子进程来加载提交应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



第一种方式

经常有人在公众号留言或者在群里问浪尖,如何使用java代码提交一个Spark应用程序。在这里浪尖介绍一种简单的方法来实现这个功能。

首先用vim打开一个文件,MyLauncher.java

编写代码如下:

import org.apache.spark.launcher.SparkAppHandle;

import org.apache.spark.launcher.SparkLauncher;

import java.util.HashMap;

public class MyLauncher {

 public static void main(String[] args) throws Exception {

HashMap<String,String> map = newHashMap<String, String>();

       map.put("HADOOP_CONF_DIR","/home/hadoop/conf");

       map.put("YARN_CONF_DIR","/home/hadoop/conf");

       map.put("SPARK_CONF_DIR","/home/hadoop/spark/conf");

     new SparkLauncher(map)

        .setAppResource("/data/newStreaming/uesc-analyzer.jar")

        .setMainClass("ucloud.UESBash.testSchema")

        .setMaster("yarn-cluster")

        .setConf(SparkLauncher.DRIVER_MEMORY, "2g")

       .setVerbose(true).startApplication();

       Thread.sleep(100000);

      // Use handle API to monitor / control application.

}

}

 

接着,进行编译

javac -cp /home/hadoop/spark/lib/spark-assembly-1.6.0-hadoop2.6.0-cdh5.4.9.jarMyLauncher.java

 

然后提交执行

java -cp/home/hadoop/spark/lib/spark-assembly-1.6.0-hadoop2.6.0-cdh5.4.9.jar:.MyLauncher

这样就可以在yarn的界面上看到运行情况了。

注释:可能你比较奇怪我为啥在那加了个停顿,因为正常情况下我们要进行一些其它操作监控Spark应用而不是直接退出,直接退出可能会导致提交还没完成退出,以至于应用程序不能被提交了。

当然,还有另外一种方式,但是不建议使用,上面采用的这种方式呢可以更好地监控我们Spark程序的状态。

第二种方式

import org.apache.spark.launcher.SparkAppHandle;

import org.apache.spark.launcher.SparkLauncher;

import java.util.HashMap;

public class MyLauncher {

 public static void main(String[] args) throws Exception {

HashMap<String,String> map = newHashMap<String, String>();

       map.put("HADOOP_CONF_DIR","/home/hadoop/conf");

       map.put("YARN_CONF_DIR","/home/hadoop/conf");

       map.put("SPARK_CONF_DIR","/home/hadoop/spark/conf");

    Process spark  = new SparkLauncher(map)

        .setAppResource("/data/newStreaming/uesc-analyzer.jar")

        .setMainClass("ucloud.UESBash.testSchema")

        .setMaster("yarn-cluster")

        .setConf(SparkLauncher.DRIVER_MEMORY, "2g")

       .setVerbose(true).launch();

      // Use handle API to monitor / control application.

       spark.waitFor();    

}

}

第二种方式是启动了一个子进程来加载提交应用程序。

至于SparkLauncher其它标准函数操作,比如如何传参,如何指定内存,cpu,如何指定钩子函数这些浪尖就不在这里啰嗦了,有兴趣可以去翻看这个类的源码。也可以在公众号里输入:submit,来获取这个类和钩子函数使用的复杂代码。

 推荐阅读:

1,读懂Word2Vec之Skip-Gram

2,CountVectorizer

3,spark调优系列之内存和GC调优




关于Spark高级玩法

kafkahbasespark,Flink等入门到深入源码,spark机器学习,大数据安全,大数据运维,请关注浪尖公众号,看高质量文章。

更多文章,敬请期待




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值