2

我正在使用SparkLauncher.

SparkAppHandle jobHandle;
try {
    jobHandle = new SparkLauncher()
            .setSparkHome("C:\\spark-2.0.0-bin-hadoop2.7")
            .setAppResource("hdfs://server/inputs/test.jar")
            .setMainClass("com.test.TestJob")
            .setMaster("spark://server:6066")
            .setVerbose(true)
            .setDeployMode("cluster")
            .addAppArgs("abc")
            .startApplication();

} catch (IOException e) {
    throw new RuntimeException(e);
}

while(!jobHandle.getState().isFinal());

我可以看到我的工作在 SparkUI 上运行,并且它正在完成而没有任何错误。

但是,我的 java 应用程序永远不会终止,因为jobHandle.getState()始终保持UNKNOWN状态。我在这里想念什么?我的火花 API 版本是 2.0.0。另一个可能相关的细节是我的启动器应用程序正在 Windows 上运行。

4

1 回答 1

1

您需要阻塞主线程并等待驱动程序的回调。我在之前的回答中解释了一个概念。

您可以在 try/catch 块中执行 Thread.sleep,或使用带有 CountDownLatch 的 Spark 侦听器。

while(!jobHandle.getState().isFinal()) { 
   //await until job finishes
   Thread.sleep(1000L);
}
于 2018-05-06T17:05:07.697 回答