当我等到spark apache工作完成时,我试图避免使用“while(true)”解决方案,但没有成功。
我有一个spark应用程序,它假设要处理一些数据并将结果放入数据库,我确实从spring服务调用它,并希望等到工作完成。
例子:
方法的启动器:
@Override
public void run(UUID docId, String query) throws Exception {
launcher.addAppArgs(docId.toString(), query);
SparkAppHandle sparkAppHandle = launcher.startApplication();
sparkAppHandle.addListener(new SparkAppHandle.Listener() {
@Override
public void stateChanged(SparkAppHandle handle) {
System.out.println(handle.getState() + " new state");
}
@Override
public void infoChanged(SparkAppHandle handle) {
System.out.println(handle.getState() + " new state");
}
});
System.out.println(sparkAppHandle.getState().toString());
}
如何正确等待处理程序的状态为“完成”。
2条答案
按热度按时间uajslkp61#
我还使用了spring应用程序中的sparklauncher。下面是我所采用的方法的总结(通过以下javadoc中的示例)。
用于启动作业的@service还实现sparkhandle.listener,并通过.startapplication将引用传递给自身。
使用这种方法,可以在状态更改为“失败”、“完成”或“终止”时采取操作。
我希望这些信息对你有帮助。
6psbrbz92#
我使用countdownlatch实现了,它按预期工作。