この記事について
以下のドキュメントの翻訳。
https://docs.cloudera.com/runtime/7.3.1/scaling-namespaces/topics/hdfs-cluster-balancing-algorithm.html
翻訳
クラスタのバランシングのアルゴリズム
HDFS Balancer は繰り返し実行されます。それぞれの繰り返し(イテレーション)は、以下の4つのステップから成ります。
- ストレージのグループを分類する
- ストレージのグループをペアリングする
- ブロック移動をスケジュールする
- ブロック移動を実行する
1. ストレージのグループを分類する
HDFS Balancer は最初に getLiveDatanodeStorageReport
のRPCを NameNode に送り、すべての DataNode のすべてのストレージのレポートを取得します。ストレージのレポートには、各DataNode のストレージの使用状況、たとえばキャパシティ、dfsの使用済み容量、空き容量などが含まれます。
2. ストレージのグループをペアリングする
HDFS Balancer は、使いすぎ、あるいは平均よりも使用量の大きいストレージをソースストレージとし、使われなさすぎ、あるいは平均よりも使用量の小さいストレージをターゲットストレージとします。そして、ソースストレージのグループをターゲットストレージのグループとペアリングします(ソース→ターゲット)。ペアリングの優先順位は、ソースおよびターゲットのストレージが同じラックにあるかどうかによって決まります。
3. ブロック移動をスケジューリングする
それぞれのソース・ターゲットのペアについて、HDFS Balancer がソースストレージからブロックのレプリカを選び、ブロックの移動をスケジューリングします。
4. ブロックの移動を実行する
HDFS Balancer はターゲットの DataNode で DataTransferProtocol.replaceBlock(..)
メソッドを起動することにより、スケジュールされたブロックの移動を実行します。