HDFSのファイル書き込み部分のソースを読んでみた

対象は0.20.2です。該当ソースはDFSClientの内部クラスのDFSOutputStreamとそのさらに内部クラスのDataStreamerとResponseProcessorです。

この辺は象本や徹底入門にも書かれていますが、それを参考に少し読んでみましたのでメモっときます。なお動かしてはいません。

ざっと絵にするとこんな感じ。

書き込みデータはパケットに分割されます。

書き込み要求があるとパケットはdataQueueにキューイングされます。

DataStreamerスレッドがdataQueueを監視しています。

dataQueueからパケットを取得してデータノードに複製数分だけデータを書き込んでいきます。

パケットはdataQueueからackQueueに移動します。

ackQueueを監視するスレッドがResponseProcessorです。

ResponseProcessorはデータノードから複製数分の書き込み成功のリプライをもらったらackQueueからパケットを削除します。

エラーが起きた場合はackQueueからdataQueueへすべてのパケットを移動してやり直します。