プロセスを書く:作品へのファイルは、サーバーにアップロードする方法
プロセスを読む:各種サーバからのデータのブロックを読み取る方法
書き込み処理
図I
図II
執筆のプロセス:HDFSClientを読み取って、このデータへの書き込みアクセスをした後、名前ノードは、割り当てられたメモリブロックの位置をブロックします、あなたがファイルを保存するたびに、名前ノードでパスを作成するパスの最初は名前ノードから行ってきましたされていますどこどこアップロードするファイルまたはファイルをダウンロードするには、保管場所の特定の名前ノード図の原理に従ってブロックを割り当てる方法。
ファイル書き込み処理の援助の理解の例:
私たちは、ファイルtest.txtのを持っている場合、私はHadoopの上に置きたい、次のコマンドを実行します。
引用文
#HadoopのFS -put /usr/bigdata/dataset/input/20130706/test.txtは/ opt / bigdata / Hadoopの/データセット/入力/ 20130706 // または次のコマンドを実行
#のHadoopのfsは-copyFromLocalは/ usr / bigdata /セット/ 入力/ 20130706 / test.txtのは/ opt / bigdata / Hadoopの/データセット/入力/ 20130706
次のように全体の書き込み処理は次のとおりです。
最初のステップは、クライアントの呼び出しは()メソッドDistributedFileSystemを作成し、新しいファイルの作成を開始:DistributedFileSystemはDFSOutputStreamを作成し、RPC名前ノードはファイルシステムの名前空間に新しいファイルを作成してみましょう、呼び出し;
第二のステップは、ユーザーの名前ノードの書き込みファイルRPCリクエストを受け取った後、でも最初のそのような顧客は、関連する使命を帯びているかどうかなど、さまざまなチェックを実行しなければならない人そうでない場合は、ファイルが作成され、に失敗しました。権限とファイル既に存在しているので、新しいファイルによってチェックがログに作成、編集、および操作記録された後、その後、DistributedFileSystemはFSDataOutStream例に包まれたオブジェクトをDFSOutputStreamなり、クライアントに返すかどうかクライアントは、IOExceptionをスロー。
第3のステップは、クライアントは、ファイルを書き込み始める:DFSOutputStreamデータキュー(データキュー)と呼ばれるこれらのパケットは、次に書き込まれ、データパケットのパケットにファイルを移動させます。ノードリスト名前ノードデータノードノードがデータのコピーを格納するようになって、その後、データノードこれらの前に、データ・ストリームのパイプラインのパイプを生成するために、データキュー要求は、我々は3つのノードがあり、データフローパイプラインデータノード、現在のパラメータのコピーが3に設定されていることを前提としています。
第四の工程は、第一DFSOutputStreamパケットは第1のデータストリームのデータノードノードのパイプラインパイプにデータを書き込む、最初のデータノード・パケットは、同様に、第2のノードのパイプラインへの書き込み、第2のノードのパケットを受信し受信したデータを保存するデータノードのパイプラインノードに第3のデータを書き込みます。
第五の工程は、別の内部書込データがキュー--ackキューを確認し、同じ内部DFSOutputStreamを維持します。第三のパイプラインデータノードパケットに成功ノードを保存した場合、ノードは、現在のノードデータの後に第2の送達確認情報のデータノードを受信し、成功したバック第二データノードに書き込まれたメッセージの確認応答データを返すは成功を書きますノードのデータも成功書いた場合は、データの書き込みに確認メッセージを送信するパイプラインデータノードを最初のノードと第1のノードを成功、それはACKパケットが情報を受信した後、キューデータから削除されます送信します。
書き込みデータの過程ではノードデータノードのパイプラインデータフローパイプラインの書き込みは、それを扱う内部に何をすべきか、でも問題が発生し、失敗した場合は?この問題が発生した場合、それはいくつかのアクションを実行します:
まず、パイプラインデータフローパイプラインが閉鎖され、パケットのACKキューが発生していないパケットの損失を保証するために、データパケットのデータキューの先頭に追加され、他の正常datanameに格納されている現在のデータで指定されるように新しいアイデンティティ、 、障害がデータ・ブロックの回収部に格納されたデータノードを削除することができるように、名前ノードに識別情報を送信する
-ノード上のデータノードこのような障害次に、ブロックのバージョンアップの保存されたノードIDに対する正常なデータノードブロックデータが正常に戻った後に、ノードが削除され、故障したノードは、パイプラインから削除され、
そして最後に、残りのデータは、他の2つのノードのパイプラインデータフローパイプラインに書き込まれます。
複数のノードは、パイプラインの故障にデータを書き込む場合に発生し、その後数はわずか(既定値は1である)が成功ブロックdfs.replication.minに到達書き込み、その後、ミッション成功書き込み、その後、名前ノードの後を追った方法であります他のノードに複製されたブロックは、最後のデータがdfs.replication構成パラメータのコピー数に達します。
ステップ6 ,,書き込み動作が完了した後、クライアントは、(クローズコール)、書き込み動作を閉じてデータを更新、
書き込み動作が名前ノードの後に閉じられた後にデータストリームをリフレッシュ,,第七工程。この全体の書き込み動作が完了しています。
読み込みプロセス
ファイルの例としては、援助の流れを理解するために読んで:
クライアントがFileSystem.open()メソッドを呼び出します。
1からファイルシステムのRPC NNとの通信、NNリターン部またはファイルブロックリストの全て(ブロックがコピーアドレスDNを含みます)。
Li 2を選択し、最新のDNクライアント接続が確立され、ブロックが読み込まれ、返すFSDataInputStreamを。
入力ストリームを読み込むためのクライアント呼び出し()メソッド:
1ブロックの読み出し側は、FSDataInputStream近い現在のDNとの接続、およびを見つけるために、次のブロックを読んでいない場合は最寄りのDNを。
図2は、走査およびブロックされるチェックサム検証、エラーがDNを読み取るとき、クライアントはNNを通知し、その後、DNを継続読み取りからブロックを所有しているコピーする起こります。
3ファイルを読み込むためのブロックリストが終わっていない場合は、ファイルシステムはNNからブロックリストの次のバッチを取得していきます。
閉じるFSDataInputStream
参考リンク:HTTPS://blog.csdn.net/zhang123456456/article/details/77882866、https://www.cnblogs.com/laowangc/p/8949850.html。