HDFSのファイル書き込み部分のソースを読んでみた
対象は0.20.2です。該当ソースはDFSClientの内部クラスのDFSOutputStreamとそのさらに内部クラスのDataStreamerとResponseProcessorです。
この辺は象本や徹底入門にも書かれていますが、それを参考に少し読んでみましたのでメモっときます。なお動かしてはいません。
ざっと絵にするとこんな感じ。
Hdfs write
View more presentations from Wataru Yukawa
書き込みデータはパケットに分割されます。
書き込み要求があるとパケットはdataQueueにキューイングされます。
DataStreamerスレッドがdataQueueを監視しています。
dataQueueからパケットを取得してデータノードに複製数分だけデータを書き込んでいきます。
パケットはdataQueueからackQueueに移動します。
ackQueueを監視するスレッドがResponseProcessorです。
ResponseProcessorはデータノードから複製数分の書き込み成功のリプライをもらったらackQueueからパケットを削除します。
エラーが起きた場合はackQueueからdataQueueへすべてのパケットを移動してやり直します。