2016-05-30 21 views
1

HDFSには、Cassandraと同じように書き込みの一貫性があります.1つのファイルをHDFSに書き込むと、最初の複製が完了したか、または3回の複製が完了したかがわかります。 (rep = 3と仮定)HDFS書き込みの一貫性

答えて

2

HadoopではCassandraとは異なる動作をします。

レプリケーションに関連する2つのパラメータがあります。

dfs.replication:デフォルトのブロック複製。実際の複製回数は、ファイルの作成時に指定できます。作成時に複製が指定されていない場合は、デフォルトが使用されます。

dfs.namenode.replication.min:最小ブロック複製。

dfs.namenode.replication.minが一度満たされると、書き込み操作は成功として処理されます。

しかし、dfs.replicationまでのこのレプリケーションは、順次パイプラインで行われます。最初のデータノードはブロックを書き込み、それを2番目のデータノードに転送します。 2番目のデータノードはブロックを書き込み、それを3番目のデータノードに転送します。

DFSOutputStreamも、ackキューと呼ばれるデータノードによって確認応答されるのを待っているパケットの内部キューを維持します。

パケットは、パイプラインのすべてのデータノードによって確認応答された場合にのみ、ackキューから削除されます。

あなたは、関連するSEの質問で詳細を見つけることができます。

Hadoop 2.0 data write operation acknowledgement

1

通常のプロセスでは、クライアントはすべてのレプリカがすべてのデータパッケージに対して「確認応答」を送信するまで待機します。しかし、書き込みプロセスでDataNodeが失敗した場合、クライアントは残りのDataNodeにデータを書き続けることになり、すべてのパッケージの受信を確認するDataNodeの数が、レプリカの最小数(デフォルト1)。この場合、レプリカの数が必要な複製数よりも少ないため、ブロックは複製されていないとマークされ、NameNodeはそれらを非同期に複製します。

次に、書き込みプロセスは、必要なレプリカがすべて作成されていなくても成功を返すことができます。

あなたはすべてのレプリカが作成された場合にのみ成功に強制したい場合は、dfs.replication(デフォルト3)

1
より dfs.namenode.replication.min(デフォルト1)同じプロパティを設定することができます

書き込みの解剖学は、クライアントがクラスタにファイルを書き込もうとすると、DNのNNに連絡します。 NNはすべてのチェックを行い、クライアントを認証します。クライアントは、DNに直接連絡してファイルを書き込みます。レプリケーションファクタが3に設定され、2つのファイルが分割されている場合。データは6つのDNに格納されます。ここでは、ラック認識ポリシーが一部の画像に適用されます。

ファイルの2つの分割を並列に格納し、複製を順次格納します。 3番目のDNは2番目のDNにアクノリッジを送信し、2番目のDNは1番目のDNにACK信号を送信します。

他のDN(別のスプリット用)に対して1回目のDN +に対してアクノリッジが受信されると、確認応答がクライアントに送信されます。

関連する問題