背景


近期在研究使用java api的方式来调用Spark程序,通过句柄的方式来完成监控Job运行状态、及时杀死Job等功能。官方文档直接指出使用Java/Scala创建Job的方式——利用SparkLauncher类。
环境:Hadoop2.6;Spark 1.6

SparkLauncher类概览


该类通过主要包含一些设置Spark Job参数相关的成员变量与函数,另外,还包括启动Spark Job的两个函数(launch()startApplication())。

其中,launch()函数只是简单拼接spark-submit命令,并以子进程的方式启动;startApplication()通过将命令提交给ChildProcAppHandle,通过其创建Launch ServerDriverLaunch Backend之间的连接,返回的ChildProcAppHandle可以实现用户与程序之间实时交互的效果。

ChildProcAppHandle类可以对提交后的job有一些交互式操作,如获取JobIb(Application****)、获取Job运行状态、杀死Job等。

综上,可以创建一个SparkLauncher,配置Spark参数,通过startApplication()的方式提交Job,然后监控获得作业的运行状态(State)。

 SparkLauncher launcher = new SparkLauncher();
launcher.setAppName(appName);
launcher.setMaster("yarn-cluster");
// launcher.setMaster("local");
launcher.setAppResource("wordcount.jar");
launcher.setMainClass("WordCount");
launcher.setConf(SparkLauncher.DRIVER_MEMORY, "2g");
launcher.setConf(SparkLauncher.EXECUTOR_MEMORY, "2g");
launcher.setConf(SparkLauncher.EXECUTOR_CORES, "3");
//jar包路径为在整个文件系统中的路径。
launcher.addAppArgs(new String[]{"",""});//SparkApp Main args
launcher.setVerbose(true); SparkAppHandle handle = launcher.startApplication(); while(handle.getState() != SparkAppHandle.State.FINISHED) {
Thread.sleep(1000L);
System.out.println("applicationId is: "+ handle.getAppId());
System.out.println("current state: "+ handle.getState());
// handle.stop();
}

实践过程中遇到问题


在实践时,由于SparkAppHandleState有如下枚举值:

想当然认为JOB运行成功状态就是FINISHED,失败会是FAILED。运行一个确实能成功运行的Job的确没有出现问题,跟预期一样。但是,在运行一个输出路径在HDFS上已存在的JOB时,后台得到的State并不是一开始想当然的FAILED,而同样是FINISHED。于是各种查,终于在GITHUB上找到链接,原来这个问题在Spark2.0中已经修复,在1.6中是已存在的bug。

细看代码yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala,进行对比。

Spark 1.6

Spark 2.0

很明显,Spark 2.0中对FINISHED的状态进行了细分,让Yarn将更准确的State状态信息传回。

SparkLauncher 1.6 版本bug的更多相关文章

  1. Lazarus下面的javascript绑定另外一个版本bug修正

    Lazarus下面的javascript绑定另外一个版本bug修正 从svn 检出的代码有几个问题 1.fpcjs.pas 单元开始有 {$IFDEF FPC} {$MODE delphi} {$EN ...

  2. Alpha版本BUG BASH

    在本次软件开发的第一轮迭代中,我们团队遇到了很多问题.首先是和学长联系不上导致拿到项目前一版本的代码的时间延后了一个星期. 拿到代码后发现由于安装环境的问题代码无法移植.在这一阶段我们就耗费了大量的时 ...

  3. DDL_Killer Alpha版本 Bug集中反馈处

    本博客用于DDL_Killer Alpha版本的Bug集中反馈. 您可以在本博客的下方评论区处留言,反馈您在使用DDl_Killer的过程中遇到的问题,以帮助我们更好的改进本产品. 我们会尽快修复找到 ...

  4. mysql 版本bug

    mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by 在mysql 工具 搜索或者插入数据时报下面错误: ERR ...

  5. chrome 49 版本bug: flex父元素设置flex:1 , 子元素用height:100%无法充满父元素

    1 <div class="container"> <div class="item"> <div class="ite ...

  6. TextInputLayout低版本bug :“android.view.InflateException: Binary XML file line #6 : Error inflating class Textview”

    开发中用到TextInputLayout配合TextInputEdittext做输入框,在android7.0 android8.0手机上运行正常,在异步android5.0.2的手机上,点击输入框就 ...

  7. eWebEditor不支持IE7以上版本Bug修改

    修改: \Include\Editor.js //把此行 if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous() ...

  8. SevenZip.pas BUG修改版 - 20160613

    原始版本: Henri Gourvest <hgourvest@gmail.com> 1.2版本 BUG修改: 1.对于文件名中带有空格的文件, 无法压缩, 原因是1488行, 压缩调用的 ...

  9. 如何通过热修复,搞定开发中的那些 Bug?

    作为程序员,Bug 修复终究是绕不开的话题,本期移动开发精英俱乐部讨论的主题便是 Bug 修复中的 Hotfix,即热修复.接下来让我们跟随大牛的脚步来了解 Hotfix,就算你不能一下豁然开朗,相信 ...

随机推荐

  1. ubuntu 系统下搭建Java的环境

    1.首先可以使用 java -version来查看自己是否已经搭建了java的环境,如果出现了java的版本号则表示java的环境已经搭建好了!否则则继续下面的步骤进行java环境的搭建 2.进入Or ...

  2. windows安装zookeeper-单机模式

    zookeeper下载地址:http://zookeeper.apache.org/releases.html#download   本次使用的是3.4.9版本 前提:请安装JDK 安装: 创建安装目 ...

  3. windows7设置开机启动方式

    打开计算机(资源管理器)(快捷键win+e),输入 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 将需要开机启动的软件的快捷 ...

  4. struts2使用配置文件中使用json-default的问题

    使用Struts2实现异步验证数据: 与Struts2相关的jar包如下: freemarker-2.3.13.jar ognl-2.6.11.jar struts2-core-2.1.6.jar s ...

  5. extern "c"用法解析

    转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ...

  6. Mac Vim + ctags 实现多目录跳转

    set tags=tags; set autochdir :wq保存. 在源码根目录中输入ctags -R命令.后重启vim,打开src文件,就能使用Ctrl+] 或 g Ctrl+] 来实现跳转了. ...

  7. NSIS对话框单位造成的控件移位问题

    在使用NSIS脚本开发安装卸载程序,使用自定义的nsdialog控件.发现在小部分系统上安装时,一些控件会消失,或者挪位.于是排除问题,看看这些控件的为位置和坐标,发现基本上是使用了对话框单位的控件, ...

  8. 【webGl】threejs实现一个简单的动画-弹跳的小球

    在这里,我们将动态画面简称为动画(animation).正如动画片的原理一样,动画的本质是利用了人眼的视觉暂留特性,快速地变换画面,从而产生物体在运动的假象.而对于Three.js程序而言,动画的实现 ...

  9. Android安全攻防战,反编译与混淆技术完全解析(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/49738023 之前一直有犹豫过要不要写这篇文章,毕竟去反编译人家的程序并不是什么值 ...

  10. SQL添加维护 计划失败

    在sql要求数据库每天自动备份这个是大家都会遇到的问题,我遇到了这个问题如图: 是因为这个服务组件没有安装