停止MapReduce作业,RunningJob#killJob vs YarnClient#killApplication

时间:2017-07-19 12:54:32

标签: hadoop mapreduce yarn

在升级到MR2(YARN)之前,我将获得对RunningJob的引用并调用#killJob以强制关闭MapReduce作业。

升级到YARN后,我发现YarnClient提供了#killApplication方法。

我是否应该费心从前者转为后者?有什么好处吗?

1 个答案:

答案 0 :(得分:1)

当MapReduce在YARN模式下运行时,MapReduce客户端的方法会通过名为YARNRunner的包装类。作业终止请求通过YARNRunner#killApplication执行。

private void killApplication(ApplicationId appId) throws IOException {
  try {
    resMgrDelegate.killApplication(appId);
  } catch (YarnException e) {
    throw new IOException(e);
  }
}

这是一个名为ResourceMgrDelegate的课程。该类在内部维护YarnClient的实例。

protected YarnClient client;

具体来说,呼叫流程委托给ResourceMgrDelegate#killApplication

@Override
public void killApplication(ApplicationId applicationId)
    throws YarnException, IOException {
  client.killApplication(applicationId);
}

因此,我们可以得出结论,在您的用例中,调用RunningJob#killJob或调用YarnClient#killApplication实际上是相同的。这两种方法都会流入YarnClient的相同代码路径,并最终调用RPC到ResourceManager来请求终止YARN应用程序。没有令人信服的理由改变你的代码,除非你想要能够阻止任何YARN应用程序(不仅仅是MapReduce)的代码。