この記事について
以下のドキュメントの翻訳。
https://docs.cloudera.com/runtime/7.3.1/scaling-namespaces/topics/hdfs-why-hdfs-data-becomes-unbalanced.html
この書式や・・・
この書式で書かれた文言は訳者個人のつぶやきであり、所属する組織とは関係ありません。
翻訳
DataNode の追加や HDFSにおけるブロックの配置、クライアントアプリケーションの挙動などにより、HDFSのクラスタに保存されたデータがアンバランスになる場合があります。
DataNode の追加
新しい DataNode がクラスタに追加されると、新たに作成されたブロックはこれらの DataNode に時々書き込まれます。
既存のブロックは、HDFS の Balancer を使わない限りはこれらのノードに移動することはありません。
クライアントアプリケーションの挙動
クライアントアプリケーションが DataNode となっているサーバーに均一にデータを書き込まない場合もあります。クライアントアプリケーションが書き込むデータが歪んでいたり、特定のマシンにばかり書き込んで他に書き込まないといったこともあります。HBase はそうしたクライアントアプリケーションの例です。それ以外の場合、たとえば MapReduce や YARN のジョブの場合では、クライアントアプリケーションが歪んでいることは仕様上ありません。
なぜ HBase だとデータが歪むのかは要調査。
HDFS上のブロックの配置
HDFSは制約的充足アルゴリズム(constraint satisfaction algorithm)を使ってファイルのブロックを配置します。制約が満たされた場合、HDFSはブロックを候補となるストレージデバイスの中から均一な確率でランダムに選んで配置します。
大規模なクラスタの場合、クライアントアプリケーションがHDFSの DataNode にわたって均一にデータを書き込んでいる限り、ブロックは本質的に均一な確率分布でランダムに配置されます。
ランダム性によって、均一な確率分布による配置は、均一なデータの配置になるとは限りません。
均一な確率分布で配置すれば均一なデータの配置になるのがランダム性じゃないのか、と一瞬思う
この点は、クラスタに十分なスペースがあれば一般的には問題になりません。
クラスタの容量がいっぱいに近づいてくると、この点が問題になってきます。
天井が近くなると、ランダム性によるちょっとした違いで天井にヒットしてしまうノードが出てくるみたいなことだと理解