2016-07-09 6 views
0

最近、私は本を読んで、同時多数のクライアントに拡張できる理由の理由を理解することはできません、私は理解できない1つの段落のは、HDFSは

」1つの重要な側面に会いましたこのデザインは、クライアントが直接 にデータノードを接続し、データを取得し、各ノードのネームノードから最良のデータノードに導かれることを意味します。 トラフィックが全員に分散されているためクラスタ内のデータノード。

「このデザインでは、HDFSが多数の同時クライアントに拡張できるようになりました」という理由を理解できませんが、「 データがクラスタ内のすべてのデータノードに分散されているため」私は彼の言葉を理解することができません、誰かが簡単に私にそれを説明することができますか?

答えて

0

特定のファイルのブロックがどのデータノードにあるかを知っている単一の名前ノードがあります。

HDFSのファイルサイズが1024 MBで、サイズが8ブロック128 MBに分割されているとします。それらのブロックが8つの異なるノードに都合よく配布されているとしましょう。

クライアントがファイルをダウンロードする必要がある場合、クライアントはファイルの名前を要求します。 namenodeがファイル自体を返すことを望むならば、最初にすべてのデータノードからファイルをダウンロードしてから、それを1つずつクライアントに返さなければなりません。 namenodeはすべてのクライアントに単独でサービスを提供し、中間データを格納して提供するためにmemory/cpuを無駄にしなければならないため、これは大いに非効率的です。 2つのクライアントが同じファイルを同時に要求した場合、namenodeはクライアントに合計16ブロックを提供する必要があります。

あなたのクライアントが各マシンから1ブロックを直接ダウンロードした場合は、効率的です。そうすれば、同じファイルを要求しているクライアントが2人いると、各データノードは2ブロック同時に処理するだけです。

hadoopインストールに付属し、hdfs dfs -<cmd>またはhadoop fs -<cmd>で呼び出し可能なFSシェルなどのHDFSクライアントを使用する場合、クライアントはデフォルトでポート9000のファイルのnamenodeを要求します。 namenodeは、異なるデータノード上の異なるブロックのURIを返します。クライアントは、通常、ポート50010のデータ転送ポートにある別のデータノードからブロックをダウンロードできます。

FSシェルを使用してファイルをダウンロードし、クライアントマシン上のネットワークを監視すると、異なるデータノードから直接ブロックをダウンロードすることがわかります。次に、4ブロックのファイルをダウンロードし、tcptrackツールを使用してネットワークを監視する例を示します。

enter image description here

これは、ワークロードを分散、名前ノードを軽減し、また、複数のdatanodesからのブロックの同時ダウンロードをするために、クライアントを可能にします。スクリーンショットでは、2つの接続がアクティブで、1つの接続が3つの異なるIPアドレス(データノード)からクローズしていることが分かります。

すべてのダウンロードが完了すると、クライアントはすべてのブロックを連結してフルファイルを取得します。