2017-07-19 7 views
1

MR2(YARN)にアップグレードする前に、RunningJobへの参照を取得し、MapReduceジョブを強制的にシャットダウンするために#killJobを呼び出します。MapReduceジョブの停止、RunningJobの実行#killJobとYarnClient#killApplication

YARNにアップグレードした後、YarnClient#killApplicationメソッドを提供しています。

前者から後者に切り替えるのはどうですか?何か利点はありますか?

+0

私は後者がアプリケーションマスターと関連するすべてのマッパーとレデューサーを停止すると仮定します –

+0

ところで、killJobは遠ざかりませんでした。 https://hadoop.apache.org/docs/r2.7.2/api/org/apache/hadoop/mapreduce/Job.html#killJob() –

+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の同じコードパスに流れ、最終的にYARNアプリケーションの強制終了を要求するためにResourceManagerへのRPCを呼び出します。任意のYARNアプリケーション(MapReduceだけでなく)を停止できるコードが必要な場合を除き、コードを変更する魅力的な理由はありません。

関連する問題