Apache spark Spark启动器句柄和侦听器未提供状态
我有一个web应用程序,它将使用spark launcher库在Cloudera spark cluster上提交spark作业 它正在将spark作业成功提交到群集。但是,它不会回调侦听器类方法,而且返回的Apache spark Spark启动器句柄和侦听器未提供状态,apache-spark,spark-launcher,Apache Spark,Spark Launcher,我有一个web应用程序,它将使用spark launcher库在Cloudera spark cluster上提交spark作业 它正在将spark作业成功提交到群集。但是,它不会回调侦听器类方法,而且返回的getState()不会从“未知”更改,即使在集群上的作业完成执行之后也是如此 我正在使用纱线簇模式。这是我的密码。还有什么需要做的吗 SparkLauncher launcher = new SparkLauncher() .setSp
getState()
不会从“未知”更改,即使在集群上的作业完成执行之后也是如此
我正在使用纱线簇
模式。这是我的密码。还有什么需要做的吗
SparkLauncher launcher = new SparkLauncher()
.setSparkHome("sparkhome")
.setMaster("yarn-cluster")
.setAppResource("spark job jar file")
.setMainClass("spark job driver class")
.setAppName("appname")
.addAppArgs(argsArray)
.setVerbose(true)
.addSparkArg("--verbose");
SparkAppHandle handle = launcher.startApplication(new LauncherListener());
int c = 0;
while(!handle.getState().isFinal()) {
LOG.info(">>>>>>>> state is= "+handle.getState() );
LOG.info(">>>>>>>> state is not final yet. counter= "+c++ );
LOG.info(">>>>>>>> sleeping for a second");
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
}
if(c == 200)
break;
}
以下是我已经尝试过的东西:
SparkAppHandle
SparkAppHandle.Listener
,并以两种方式传递它(this
)(启动时,以及通过将其设置为SparkAppHandle
)launcher.launch()
方法,以便至少可以通过调用Process.waitFor()
方法阻止生成的Process
对象,直到spark作业在集群上运行完毕。但是,在这种情况下,对于长时间运行的spark作业,此节点上的相应进程永远不会返回(尽管对于在1或2分钟内完成的spark作业,它工作正常)我已经从spark用户邮件列表中得到了这个问题的答案。要使此功能正常工作,不仅spark launcher需要为1.6.0,而且基础spark至少应该为1.6.0
我一直在使用spark 1.5.1和1.6.0版本的launcher库。现在,我已经将spark cluster更新到1.6.0版本,现在我得到了对方法的回调。在哪里可以解决这个问题?我在spark用户邮件列表上得到的答复是,基础spark至少需要1.6.0版本(我使用的是1.5.1)。一旦我成功地测试了它,我将把它作为一个答案发布。为了让它工作,我必须做些什么?我也面临同样的问题。应用程序立即退出,并获取appID和状态。如果我显式调用Thread.sleep()就可以工作。谢谢我面临的问题是根本无法获取state或appID。我认为,如果您想等待spark作业完成,可以放置一个循环,该循环将轮询句柄的状态,直到到达最终状态(
handle.getState().isFinal()
)。