Spark 应用使用spark laucher提交应用 替代spark-submit脚本提交应用

5 篇文章 0 订阅
1 篇文章 0 订阅

使用Package org.apache.spark.launcher来提交spark应用

接口摘要

接口描述
SparkAppHandle

运行Spark应用的句柄

SparkAppHandle.Listener

获得句柄状态更新的监听器

类摘要

描述
AbstractLauncher<T extends AbstractLauncher>

启动器实现的基础类

InProcessLauncher

Spark应用的同进程(In-process)启动器

SparkLauncher

Spark应用的启动器

枚举摘要

枚举描述
SparkAppHandle.State

表示应用的状态

 

Package org.apache.spark.launcher 描述

有两种方式使用这个库去启动应用,1. 作为一个子进程的话使用SparkLauncher 2. 在同一进程的话使用InProcessLauncher

AbstractLauncher.startApplication( org.apache.spark.launcher.SparkAppHandle.Listener...)方法可以被用来开始Spark并提供一个句柄去监控正在跑的应用:

   import org.apache.spark.launcher.SparkAppHandle;
   import org.apache.spark.launcher.SparkLauncher;

   public class MyLauncher {
     public static void main(String[] args) throws Exception {
       SparkAppHandle handle = new SparkLauncher()
         .setAppResource("/my/app.jar")
         .setMainClass("my.spark.app.Main")
         .setMaster("local")
         .setConf(SparkLauncher.DRIVER_MEMORY, "2g")
         .startApplication();
       // Use handle API to monitor / control application.
     }
   }

启动应用作为一个子进程的话要求一个完整的spark安装。这个安装字典能够被明确地在启动器配置里提供给启动器,或者通过配置SPARK_HOME环境变量。

在同进程中启动应用仅推荐使用在集群模式,Spark不能并行运行客户端模式的应用在同一个进程中。这个同进程启动器要求必要的Spark依赖(比如Spark-core和cluster manager-specific模块)去进行调用线程类的装载。

也可以启动一个原生的子进程,不使用额外的监控,使用SparkLauncher.launch()方法:

   import org.apache.spark.launcher.SparkLauncher;

   public class MyLauncher {
     public static void main(String[] args) throws Exception {
       Process spark = new SparkLauncher()
         .setAppResource("/my/app.jar")
         .setMainClass("my.spark.app.Main")
         .setMaster("local")
         .setConf(SparkLauncher.DRIVER_MEMORY, "2g")
         .launch();
       spark.waitFor();
     }
   }

这个方法要求调用代码去手动的管理子进程,包括输出流(提供可能的死锁)。推荐使用SparkLauncher.startApplication( org.apache.spark.launcher.SparkAppHandle.Listener...)来替代。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值