学習ポータルのHDFSファイルの読み取りと書き込みプロセス

その後、我々はここに記録されたHDFSのプロセスを、読み書きを学びます。

HDFS-名前ノード、データノード間の通信

そして、読み出しにHDFS理解前に書き込み動作、HDFSクライアントは、クライアントが上記のそれらの間の相互通信にDataNodes示すことができるように、また、ノードクライアントと呼ぶことができるJVMで実行されて学びました。

(1)とHDFSクライアントの名前ノード間のRPC通信

データノード名前ノード間の(2)及びRPC通信

ソケット通信は、(3)HDFSクライアントとデータノードの間で正常です

HDFS読みます

要約読みます

クライアント側は、特定のファイルを読み取るためにした場合、このファイルはブロックに分割されているので、それを読むためにどこかわからない始まりである、上記の異なるデータノードに存在し、そのファイルがいくつかに分かれて名前ノードに頼ることを伝えることが必要です所定の位置に存在しているブロック、。名前ノードは、クライアント側に結果を返した後、得られたブロック情報に基づいて、クライアント側のメモリブロックは、データノードにデータを読み出します。

詳細を読みます

1 HDFSクライアントJVMは、仮想マシンで実行され、それはHadoopのリターンFSDataInputStreamオブジェクトの下にopenメソッドのDistributedFileSystemを呼び出します。

2オブジェクトがFSDataInputStreamを戻したときに、オブジェクトインタフェースClientProtocol getBlockLocations方法RPCを介してクライアント側に情報を返す名前ノードと同じ名前のメソッドブロックを呼び出します。ClientProtocolの効果を作成するために、RPC通信のユーザーのために使用され、名前ノードDistributedFileSystemクラスとメソッドは、名前空間のファイルのディレクトリを操作するために使用することができることがわかります。

3 LocatedBlocks JVMは、位置情報とデータノードのブロック長情報ブロックを含むオブジェクトタイプに戻り、データノードと、クライアントは、上面が最も最近になり距離に従ってソートする呼ぶgetBlockLocations方法を、参照。

その後、456クライアント側とreadメソッドのFSDataInputStreamオブジェクトを呼び出すには、となります(上記DataNode01とクライアント場合、DataNode01 Aに最初に読み込まれたデータを読み取るために、それをブロックがある)に関する最近のデータノードにデータブロックを読み始めましたデータのチェックサムが、検査(CRC32アルゴリズム使用)を返され、すなわち、両者が一致している場合、このブロックの読取終了をブロックDatanodes上のデータを読み取るためのチェックサムとチェックサムブロックをチェックし、その後、ブロックの残りを読み出します。

7チェックサムを確認するには、上記の手順で問題を有することが判明し、または接続の中断は、このブロックが近づいデータノードのコピーが含まれているから読み出され、また、チェックサムを確認する必要があります、発生した場合。HDFSのハートビート・メカニズムなので、名前ノードはデータノードは、次の時間は、もはやそれから読み込みます録音しないために失敗した読み込みます。

ブロックを読んだ後8が完了すると、この文書の末尾を読み取り、closeメソッドのFSDataInputStreamを呼び出します。

HDFS書き込み動作

要約は書きます

あなたは、このような300MファイルはHDFSを書き込む必要があるとして、HDFSへのクライアント側のファイルを記述する必要がある場合は、クライアントがどのようにデータノードを保つためにどのように分割し、その名前ノードに頼る必要性を認識していない、各ノードに格納されている名前ノードデータは、上のベース状況、およびファイルの現在のサイズは、合理的なストレージ計画を計算し、クライアントはいくつかのデータノードを個別に存在するいくつかのブロックに分割する必要があります伝えます。次に、クライアントは最初に、ブロックが割り当てられた別の翻訳DataNodesにコピーされます、ブロックを書き、最寄りDataNodesを見つけるだろう、ブロックの完全なブロックを書いて、残りのブロックは同じ操作です。

詳細を書きます:

HDFSは、JVM仮想マシンのクライアントで実行する1は、接続中と名前ノード、DFSClientを使用して作成されたHadoopのリターンDFSOutputStreamオブジェクト返されたオブジェクトの下に作成する方法のDistributedFileSystemを呼び出します。

DFSOutputStreamオブジェクトを返す前に23、ClientProtocalクライアント上で作成する方法を使用して、書き込まれるファイルがあるかどうかを判断するために、作成時にパス(絶対パス)を決定する必要があり、名前ノードNameNodeRpcServer、HDFS上の新しいファイルの確立にメソッドを作成して呼び出しますクライアントは、このような確立部数などのファイル、情報を作成する権限を持っている場合。

空のファイルの終了がHDFSに作成された後、操作が名前ノードのeditlogに記録され、オブジェクトDFSOutputStreamにカプセル化されたクライアントFSDataOutputStream、に戻るであろう。

4クライアント端末は、書き込み方法は、そのようなデータノードおよびブロック長情報など、詳細な情報ブロックが含まれているLocatedBlockオブジェクトを返すようにデータを書き込む前にaddBlock法ClientProtocolを呼び出すと、(writeメソッドを見つけることができませんでした?)データの書き込みを開始DFSOutputStreamを呼び出しますあなたは、位置情報が書き込まれるデータのパスとデータフローパイプラインパイプラインの確立を知っている知っています。

また、このメソッドの実装後のタイムスタンプは、名前ノードレポートファイルに作成されます。

5ブロックにデータの書き込みを開始するように書かれており、図17に示すデータノードの位置、後に決定されます。

5.1呼び出しDFSOutputStreamは、512バイトのデータと4バイトのチェックサムを含む、チャンクチェックブロックにデータを書き込む方法にwriteChunk

5.2チェックブロックは、より大きなチャンクpackateユニットの64KiBのサイズに追加されます

5.3 packate dataqueueの1が書き込まれるのを待っているキューに追加し、それがデータを挿入し、削除するためのリンクリスト構造であることがわかります。また、コピーキューのackQueueを反映し、キューは、レプリケーションを確認するために使用されます。

5.4そのような順次書き込まDataNode01→DataNode02→DataNode03、及び逆戻りACK確認パケットのようなデータは、リターンのテキスト入力欄と、画像がそうでなければ、彼らはackqueueから削除され、packate ackqueueに削除されたら、1 packateがパイプラインに書き込みますpackateはそれを再送信しようとdataqueueに対応しています。

上記の方法に従ってすべてのデータブロックが終了5.5、空packateの代表的なパイプラインの現在のブロックを閉じ、終了し、書き込み処理が他のブロックに類似して送信します。

終了ブロック6のすべての後に、必要がクライアント端末のブロックチェックサムを確認し、チェックサムはデータノードかどうかを同じに書き込まれます。チェックサムは、ブロックの矛盾をチェックする場合は、更新タイムスタンプのブロックを実行するブロックを削除し、pinelineを更新し、新しいデータノードに適用すると、チェックは第七の実施を継続しても問題ありませんし、次の場合は、ブロック、名前ノードの更新プログラムのメタデータや他の操作をコピーします8ステップ動作。

dataqueueを再結合しますackqueueすべてのデータでは6.1出力ストリームDFSOutputStream

データデータノードOK上のブロック、およびは、データノードのブロックと、このブロックを削除して一貫性のない名前ノードのタイムスタンプを保存する場合でも、失敗時には6.2には、ブロックの呼び出しupateBlockForPipeLine ClientProtocolメソッドの出力ストリームは、新しいタイムスタンプを適用し、名前ノードに格納します。

6.3出力ストリームgetAdditionalDataNode方法はClientProtocolを呼び出すので、パイプラインに割り当てられた名前ノード新しいデータノードとブロックの上に新しいタイムスタンプを使用します。そして、この方法は、またそれは、書き換え対象ブロックの詳細を認識している、LocatedBlockを返します。

6.4新しいDateNode、書くことも知られているブロックの情報を持って、次のクライアントは、メソッドを使用しtransferBlock、新しいデータノードに正常なDateNodeにおけるパイプラインを通じてDataTransferProtocolコピー情報のこのブロックを呼ぶだろうか?

コピーが再び完了し、6.5パイプラインされた後、名前ノードのメタデータを更新し、メソッドのClientProtocol出力ストリームをupdatePipeline呼び出します。

流れDFSOutputStreamオフに呼び出すメソッドの合意で​​あれば7近いです

RPCを使用して9クライアント端末の完全な方法は、書き込み操作を完了するために、ClientProtocol名前ノードの完全なメソッドを呼び出します

HDFSは、フォローアップを改善し続け、読み、上記の分析プロセスに書き込みます。

参考博文:
(1)https://www.csdn.net/gather_2c/MtTaYgysMzYzNy1ibG9n.html
(2)https://blog.csdn.net/itas109/article/details/79351704
(3)のhttps://ブログ。 csdn.net/whdxjbw/article/details/81072207

おすすめ

転載: www.cnblogs.com/youngchaolin/p/11516663.html