shell spark-submit提交之后获取appid,并在程序中扫描状态

本文介绍了如何通过shell脚本提交spark作业,并在提交后获取application_id。接着,利用YARN的REST API来监控作业状态,以application_1591596770810_0207为例展示了具体操作。

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

#首先看一下提交脚本

#/sbin/bash
/opt/cloudera/parcels/SPARK2/bin/spark2-submit \ 
export JAVA_HOME=/opt/jdk1.8.0_31
TASK_TYPE=$1
TASK_JSON=$2
SPARK_CONFIG=$3
appId=`
$SPARK_CONFIG \
"$TASK_JSON" \
$TASK_TYPE \
2>&1 | tee /dev/tty | grep -i "Submitting application" | grep -o  application_[0-#9]*_[0-9]*`
echo "appid:"$appId

就是下面这两个 我们输出格式application_1591596770810_0207
appId=2>&1 | tee /dev/tty | grep -i "Submitting application" | grep -o application_[0-#9]*_[0-9]*
echo “appid:”$appId

###利用yarn提供的restapi去取

//yarnaddress: http://*****:8088/ws/v1/cluster/apps
    private String readAll(Reader rd) throws IOException {

        StringBuilder sb = new StringBuilder();

        int cp;

        while ((cp = rd.read()) != -1) {

            sb.append((char) cp);

        }

       
### 如何将 Spark 作业提交到集群 #### 使用 Shell 脚本提交 Spark 作业 通常情况下,可以通过 `$SPARK_HOME/bin/spark-submit` 命令来向 Spark 集群或 Hadoop/YARN 提交 Spark 作业。此命令允许指定诸如主类、JAR 文件路径以及资源配置等参数[^1]。 ```bash spark-submit \ --class com.example.SparkApp \ --master yarn \ --deploy-mode cluster \ --driver-memory 4g \ --executor-memory 2g \ --executor-cores 1 \ /path/to/application.jar \ arg1 arg2 ``` 上述脚本展示了如何通过 `spark-submit` 向 YARN 提交一个 Spark 应用程序实例。这里指定了应用的入口类 (`com.example.SparkApp`) 和 JAR 文件的位置 (`/path/to/application.jar`) ,同时也设置了驱动程序内存大小为 4GB,执行器内存为 2GB 且每个执行器核心数设为了 1 。最后还传递了一些额外的应用参数给应用程序本身[^5]。 #### 从 Java 代码中提交 Spark 作业至 YARN 对于希望直接从 Java 或者其他 JVM 编程语言编写的程序内启动提交 Spark 任务的情况,则可以利用 YARN 的客户端 API 来实现这一点。具体来说就是创建一个新的 YARN 客户端对象通过它调用相应的方法完成配置设置与最终的任务提交过程[^2]。 下面是一个简单的例子展示怎样使用 YARN 的 Client 类来进行操作: ```java import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.client.api.YarnClient; public class SparkJobSubmitter { public static void main(String[] args) throws Exception { // 初始化YARN客户端 final YarnClient client = YarnClient.createYarnClient(); client.init(new Configuration()); client.start(); // 设置应用程序ID和其他必要的属性... ApplicationId appId = ...; // 获取或生成application ID // 构建容器启动上下文... ContainerLaunchContext clc = ... ;// 创建container launch context // 将构建好的context传入client.run()方法中去真正发起请求 client.submitApplication(clc); // 关闭连接 client.stop(); } } ``` 这段代码片段说明了如何初始化 YARN 客户端,准备用于启动新应用程序所需的信息(如 application ID),之后再把这些信息打包成 container launch context 对象形式交给 `submitApplication()` 函数处理以触发实际的工作流提交动作。 #### Spark Job 提交流程解析 当通过 `spark-submit` 工具或者其他方式提交 Spark 作业时,在后台会经历一系列复杂的交互步骤。这些步骤包括但不限于加载环境变量、解析命令行选项、建立与 ResourceManager 的通信链接等等。整个过程中涉及到多个组件之间的协作,比如 Main 类负责整体协调工作;SparkSubmitCommandBuilder 则参与到了具体的命令构造环节之中;而 OptionParser 可能会被用来解析来自用户的输入参数列表[^3]。 #### 控制资源分配策略 除了掌握基本的提交机制外,理解 Spark 中关于资源管理和调度方面的概念同样重要。这不仅涉及到了不同应用程序之间共享物理硬件资源的方式——即所谓的“跨应用程序”的层面——还包括同一 Spark 上下文中发运行着多项计算任务时内部是如何动态调整可用资源配额的问题。这种灵活性使得开发者可以根据实际情况灵活调配计算能力,从而提高系统的吞吐量和响应速度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南修子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值