0

コマンドラインを使用していますが、どのホストからファイルを取得したか (またはどのレプリカを取得したか) を知りたいと思っています。

通常、それは私に最も近いはずです。しかし、私はプロジェクトのポリシーを変更しました。したがって、最終結果をチェックして、新しいポリシーが正しく機能するかどうかを確認したいと考えています。

次のコマンドでは情報が得られません。

hadoop dfs -get /ファイル

そして、次のものはレプリカの位置のみを示しますが、どちらが優先されるかはわかりません。

hadoop fsck /file -files -blocks -locations

4

2 に答える 2

0

HDFS は、ユーザーがどこから読み取っているのかを知ることはあまり役に立たないため、この情報を抽象化します (ファイルシステムは可能な限り邪魔にならないように設計されています)。通常、DFSClient は、返されたホストの順序でデータを取得しようとします (失敗した場合は別の方法に移動します)。返されたホストは、適切なデータまたはラックのローカリティのために NameNode によってソートされます。これがデフォルトのシナリオの仕組みです。

あなたの質問に対する適切な答えは、これをシミュレートしてアサートできる優れたテスト ケースを作成することですが、Hadoop ロガーを DEBUG に設定してプログラムを実行し、さまざまなホスト (DN を含む) への IPC 接続を確認することもできます。ファイルの読み取り - これらを調べて、ホストの選択が意図したとおりに機能していることを手動で確認します。

もう 1 つの方法は、クライアントをデバッガーで実行し、データを取得するために最終的に行われた接続 (つまり、NN RPC の後) の周りの部分を観察することです。

于 2012-12-30T21:04:55.290 に答える
0

ありがとう、

最後に、単純なテスト ケースでネットワーク統計を使用して、hadoop がレプリカを取得する場所を見つけます。

しかし、最も簡単な方法は、このメソッドによって変更された配列ノードを出力することです。

org.apache.hadoop.net.NetworkTopology pseudoSortByDistance (ノード リーダー、ノード [] ノード )

予想どおり、レプリカの取得はメソッドの結果に基づいています。最初のアイテムが優先されます。ノードにエラーがある場合を除いて、通常は最初の項目が取得されます。この方法の詳細については、レプリケーションを参照してください。

于 2013-01-01T14:17:03.923 に答える