LoginSignup
5
5

More than 5 years have passed since last update.

HDFSの再バランス

Posted at

課題

Hadoopでhdfsを使用しているが下記の様なことが発生した

  • 特定のノードだけ妙にswapしたり負荷が高くなったりする
  • 追加したノードが使われていない気がする。

原因

HDFSは、頻繁に書き込みや削除を繰り返すとデータに偏りが出てきてしまうため(データの断片化)、特定のノードにデータを取得してしまうため負荷も偏ってしまう。

また、ノードを追加した時に自動で再バランスするわけではないので、手動で再バランスをするか、新しいファイルを作るタイミングからブロックを割り当てるのを待つしかないようです。

再バランス結果

各ノードのデータ量を平準化するためCloudera Managerで再バランスをしてみる

手順

サービス -> hdfs -> アクション -> 再バランス

結果ログ

2014-01-07 12:34:12,342 INFO  [main] balancer.Balancer (Balancer.java:parse(1538)) - Using a threshold of 10.0
2014-01-07 12:34:12,351 INFO  [main] balancer.Balancer (Balancer.java:run(1417)) - namenodes = [hdfs://nameservice1]
2014-01-07 12:34:12,353 INFO  [main] balancer.Balancer (Balancer.java:run(1418)) - p         = Balancer.Parameters[BalancingPolicy.Node, threshold=10.0]
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved
2014-01-07 12:34:14,239 INFO  [main] net.NetworkTopology (NetworkTopology.java:add(393)) - Adding a new node: /default/192.168.1.1:50010

(snip)

2014-01-07 12:34:14,253 INFO  [main] balancer.Balancer (Balancer.java:logNodes(907)) - 0 over-utilized: []
2014-01-07 12:34:14,257 INFO  [main] balancer.Balancer (Balancer.java:logNodes(907)) - 2 underutilized: [BalancerDatanode[192.168.1.6:50010, utilization=0.35506872895520886], BalancerDatanode[192.168.1.7:50010, utilization=0.372112826760373]]
2014-01-07 12:34:14,264 INFO  [main] balancer.Balancer (Balancer.java:run(1344)) - Need to move 91.54 GB to make the cluster balanced.
2014-01-07 12:34:14,267 INFO  [main] balancer.Balancer (Balancer.java:chooseSource(1086)) - Decided to move 10 GB bytes from 192.168.1.2:50010 to 192.168.1.6:50010
2014-01-07 12:34:14,268 INFO  [main] balancer.Balancer (Balancer.java:chooseSource(1086)) - Decided to move 10 GB bytes from 192.168.1.3:50010 to 192.168.1.7:50010
2014-01-07 12:34:14,273 INFO  [main] balancer.Balancer (Balancer.java:run(1358)) - Will move 20 GB in this iteration
Jan 7, 2014 12:34:14 PM           0                  0 B            91.54 GB              20 GB

(snip)

2014-01-07 14:01:52,211 INFO  [main] balancer.Balancer (Balancer.java:logNodes(907)) - 0 over-utilized: []
2014-01-07 14:01:52,212 INFO  [main] balancer.Balancer (Balancer.java:logNodes(907)) - 0 underutilized: []
The cluster is balanced. Exiting...
Balancing took 1.4613238888888889 hours

まとめ

  • 多少の速度低下はあったものの運用したままで再バランスすることはできた
  • 2つのノードを新規追加した場合、再バランスを実行すると自動で検出して既存のノードから10GBずつ分配された.
  • 全体が1.5TBのデータで91.54GBが再バランス対象を完了するのに1時間半位かかった。(NetworkやIO速度に依存するけど。。)
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5