2017-01-28 10 views
1

以下のステートメントについて詳しく説明しました。私がhow the HDFS writes happens to Data nodesを理解しようとしたとき。私はHDFSの書き込みについて以下の説明を得ました。データノードへのファイルコピー時のHadoop HDFSでのデータフローパイプライン

なぜ、hdfsクライアントはブロック64MBをデータノードに送信するのではなく、4KBをデータノードに送信するのですか?いくつか詳しく説明できますか?

パフォーマンスを向上させるため、データノードはデータ転送のパイプラインを維持します。データノード1は、フロー内のデータノード2への転送を開始する前に、完全なブロックが到着するのを待つ必要はない。実際、あるブロックのクライアントからデータノード1へのデータ転送は、4KBの小さなチャンクで行われます。データノード1は、クライアントから最初の4KBのチャンクを受信すると、このチャンクをローカルリポジトリに格納し、すぐにそのノードをフローのデータノード2に転送し始めます。同様に、データノード2は、データノード1から最初の4KBのチャンクを受信すると、このチャンクをローカルリポジトリに格納し、直ちにそれをデータノード3に転送し始める。この方法では、最後のものを除くすべてのデータノードは、各ステージで待ち時間を避けて書き込みパフォーマンスを向上させるために、前のものをフロー内の次のデータノードに転送します。

+0

投稿したコンテンツのソースを追加できますか? – mrsrinivas

+0

http://www.informit.com/articles/article.aspx?p=2460260&seqNum=2。 –

答えて

3

あなたの質問には答えがあります。

ファイルサイズがブロックサイズ(128 MB)に等しいと仮定します。そう**A, B, C .. are the chunks in block**

Data Flow Pipeline https://i.stack.imgur.com/REO6r.jpg

データノード1は、クライアントからの最初の4キロバイト(A)チャンクを受信すると、直ちに 格納そのローカルレポジトリにおけるこのチャンクとは、データノード2に転送 開始します流れの中で。データノード2 データノード1から第4KBのチャンクを受信した場合も同様に、それはその ローカルリポジトリにこのチャンクを格納し、直ちに利点は、データノード2および3は必要はない。ここでのデータノードに3

をそれの転送を開始しますレプリケーションを開始する前に128 MBのデータがデータノード1にコピーされるまで待機します。したがって、遅延は、すべてのチャンクがノードに並列にコピーされるので、複製がちょうど1つまたは2つのチャックコピー時間になるので、です。

+1

ありがとうございました。 –

1

通常、ファイルは大きなサイズであるため、データの一部を受信するとすぐにデータを転送するように設定されているため、処理が開始されます。

ここでは、3つのデータノードがあり、マップジョブが実行されると仮定して説明します。入力ファイルが存在するデータまたはブロックはノード1にあり、ノード2には複製があります(複製係数2と仮定しています)。しかし何らかの理由で、またはノード1とノード2の両方でビジー状態であるために他のジョブが実行されている可能性があるため、地図ジョブは、マップを実行する入力ファイルを持たないノード3で実行する必要があります入力ファイルをこのノード3に転送する必要があります。ノードマネージャはマップジョブを開始する前にノード3に64MBの多分のデータが転送されるのを待っています。 4kbはノード3がそれを受け取るとすぐに、より迅速に転送されるので、マップジョブを開始します。これはHadoopのシンプルなシナリオの1つです。

Hadoopストリーミングを調べる場合、連続してストリーミングする必要があるため、転送を短く高速に保つために4kBのデータがさまざまなデータノード間で転送される理由です。これはまた、スパークストリーミングが優先される主な理由の1つですHadoopは連続データを転送しないため、Hadoopストリーミングでは連続データのように見える非常に小さなデータを転送します。

ノードマネージャがどのようにジョブを開始するかを調べるには、http://javacrunch.in/Yarn.jspにアクセスしてください。

希望しています。

関連する問題