4

根据此文档,使用 SparkLauncher 和方法启动/提交的 Spark 应用程序startApplication可以使用返回的 SparkAppHandle 和kill()方法终止,因为它是一个子进程。我尝试结合 CountDownLatch 和计时器来实现它,但它对我不起作用。带有 SparkLauncher 的 Java 应用程序在 20 分钟后完成,但之后 spark 应用程序仍在我的 YARN 集群上运行。

我正在使用以下代码:

`
// launcher config...
CountDownLatch countDownLatch;
Listener handleListeners = new Listener() {
    @Override
    public void stateChanged(SparkAppHandle handle) {
        if (handle.getState().isFinal()) {
            countDownLatch.countDown();
        }

        @Override
        public void infoChanged(SparkAppHandle handle) {}
    };

countDownLatch = new CountDownLatch(1);
SparkAppHandle handle = launcher.startApplication(handleListeners);
boolean regularExit = countDownLatch.await(20, TimeUnit.MINUTES);
if (!regularExit)
    handle.kill();                                                                          

` 我仍然想知道当 kill-command 已经在集群上运行时,它应该可以工作。

(拜托,有人可以修复代码片段吗?我的格式不正确-_-谢谢。)

4

0 回答 0