MR2(YARN)にアップグレードする前に、RunningJob
への参照を取得し、MapReduceジョブを強制的にシャットダウンするために#killJob
を呼び出します。MapReduceジョブの停止、RunningJobの実行#killJobとYarnClient#killApplication
YARNにアップグレードした後、YarnClient
は#killApplication
メソッドを提供しています。
前者から後者に切り替えるのはどうですか?何か利点はありますか?
MR2(YARN)にアップグレードする前に、RunningJob
への参照を取得し、MapReduceジョブを強制的にシャットダウンするために#killJob
を呼び出します。MapReduceジョブの停止、RunningJobの実行#killJobとYarnClient#killApplication
YARNにアップグレードした後、YarnClient
は#killApplication
メソッドを提供しています。
前者から後者に切り替えるのはどうですか?何か利点はありますか?
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
の同じコードパスに流れ、最終的にYARNアプリケーションの強制終了を要求するためにResourceManagerへのRPCを呼び出します。任意のYARNアプリケーション(MapReduceだけでなく)を停止できるコードが必要な場合を除き、コードを変更する魅力的な理由はありません。
私は後者がアプリケーションマスターと関連するすべてのマッパーとレデューサーを停止すると仮定します –
ところで、killJobは遠ざかりませんでした。 https://hadoop.apache.org/docs/r2.7.2/api/org/apache/hadoop/mapreduce/Job.html#killJob() –
これは当てはまりますが、前者も同様です。 –