hadoop datanode 縮退時に replication 数以下にまで落としたらちょっと困った件

とある開発環境のhadoopクラスタの規模を小さくする時にちょっと詰まった。 通常は増やすこととか減らしたとしても壊れたからとかスペックがあれなんで外す、ってことだと思うけど、バラすまでやってみた。レアなケースな気はするのでメモっておく

具体的に言うと

  1. node数がreplication数より小さくなった時にwarnがでる
  2. replication数を小さくする目的で hadoop dfs -setrep -w すると応答がものっそい遅い

1.

/etc/hadoop/conf/hosts.excludeに取り外すマシンを追記するとStatus : Decommissionedになってreplicationが走りだす。 この時replication数よりもdatanodeの数が小さくなるまで追記すると

/var/log/hadoop/hadoop-hadoop-namenode-YYYY.2013-05-15:2013-05-15 17:11:13,488 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Not able to place enough replicas, still in need of 1(excluded: XXX.XXX.XXX.1:50010, XXX.XXX.XXX.1:50010, ...(略)

こういうWARNINGがたくさん出て、Under replicated blocks: 0が減らなくなるので帰れなくなる。

2.

「縮小が目的でそれほど大事じゃないデータ(開発環境なので)」なのでreplicationの数を変更する。

$ hadoop fs -setrep -w 2 <FILE>

上記のコマンドで-wを付けないと、バックグラウンドで処理が走るようになる。-wをつけておくと、shellに戻ってこないので、続けて処理を書いておいたりできる。

このチケットで-wがついたHADOOP-1595

だけど、これはめちゃめちゃ時間がかかる。大きなクラスタではないし、データサイズも大したことなかったけど、相当かかるので覚悟して下さい。