0

現在、Hadoopを使用しています。特定のジョブのマップタスクが、それ自体のノードからデータを読み取っているのか、他のノードからデータを読み取っているのかについての情報を取得できるかどうか疑問に思いました。HDFSがすべてのノードに分散されていることは知っていますが、特定のジョブと特定のマップタスクについて、ampタスクが実行されている同じノードから読み取られたデータの量と量を示すカウンター/メトリックはありますか?データはネットワークを介して読み取られました。

4

1 に答える 1

0

Hadoop には、ローカルで読み取られたデータの量とネットワーク経由で読み取られたデータの量を示すカウンターがありません。

あなたができる唯一のことは、さまざまな標準カウンターを組み合わせ、それに基づいてローカルおよびネットワーク経由の読み取りデータの概算を取得することです。

  • DATA_LOCAL_MAPS: ローカル データ (マシンに対してローカル) を使用した、ジョブ内のマップ タスクの数。

  • RACK_LOCAL_MAPS: 入力データと同じラック内のノードで実行されたマップ タスクの数。

  • OTHER_LOCAL_MAPS: 入力データが配置されているラックとは異なるラックのノードで実行されたタスクの数。

  • MAP_INPUT_BYTES: すべてのマップ タスク (ジョブ全体) によって消費されたデータの合計量を示します。

*(Hadoop のディストリビューションのカウンターの正確な名前を確認する必要があります)

各マップが 1 つの入力分割を処理し、デフォルトの入力分割がほぼ等しいことを考慮すると、次の式を使用して、ローカルで処理されたデータの合計量を見つけることができます。

    DATA_LOCAL_MAPS * MAP_INPUT_BYTES/(DATA_LOCAL_MAPS + RACK_LOCAL_MAPS +
                                             OTHER_LOCAL_MAPS)

乗算の第 2 項は、マップ タスクごとの入力バイト数を示します。

于 2012-08-15T00:19:58.737 に答える