Hadoopのnamenode兼datanodeが電源瞬断のせいで壊れてしもうた。
勉強用のHadoopなのでダメージはないのだが、せっかくなのでfsckなどを試した結果を記す。
hadoop-1.0.0。
OS側でもfsckはしておいた。
サマリ
- HDFSにもfsckがある。
- hadoop fsckでチェック、修正できる。
- hadoop fsckと叩けば使い方の簡単な説明が表示される。
- namenodeがsafemodeのためにHDFSが読み取り専用になっていることがある。
- 読み取り専用ではfsckで修正できないので、safemodeから出る必要がある。
HDFSでのfsck
hadoop fsck <path>と指定すればよい。
CORRUPT!とのことで、壊れておりますなあ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$ hadoop fsck / FSCK started by hadoop from /172.29.17.159 for path / at Wed Dec 25 18:51:37 JST 2013 (略) /var/hadoop/mapred/system/jobtracker.info: MISSING 1 blocks of total size 4 B.Status: CORRUPT Total size: 45638364128 B Total dirs: 5321 Total files: 13059 Total blocks (validated): 9819 (avg. block size 4647964 B) ******************************** CORRUPT FILES: 2470 MISSING BLOCKS: 2498 MISSING SIZE: 15590981155 B CORRUPT BLOCKS: 2498 ******************************** Minimally replicated blocks: 7321 (74.559525 %) Over-replicated blocks: 0 (0.0 %) Under-replicated blocks: 7321 (74.559525 %) Mis-replicated blocks: 0 (0.0 %) Default replication factor: 2 Average block replication: 0.7455953 Corrupt blocks: 2498 Missing replicas: 7321 (100.0 %) Number of data-nodes: 1 Number of racks: 1 FSCK ended at Wed Dec 25 18:51:38 JST 2013 in 1185 milliseconds The filesystem under path '/' is CORRUPT |
壊れている場合の対処:消去か移動
壊れている場合には対処が二つ。
壊れているブロックを消すか、lost+foundに移すか。
消す場合には-delete, 移す場合には-moveを指定する。
以下は消した場合の例….なのだが、namenodeがsafemodeにいるので変更が出来ないとのこと。
1 2 3 4 5 6 7 8 9 10 |
$ hadoop fsck / -delete FSCK started by hadoop from /172.29.17.159 for path / at Wed Dec 25 18:58:29 JST 2013 . /tmp/hadoop-hadoop/mapred/staging/hadoop/.staging/job_201308300823_0001/job.jar: CORRUPT block blk_3947350403157044322 /tmp/hadoop-hadoop/mapred/staging/hadoop/.staging/job_201308300823_0001/job.jar: MISSING 1 blocks of total size 66249 B.FSCK ended at Wed Dec 25 08:58:29 JST 2013 in 5 milliseconds Cannot delete /tmp/hadoop-hadoop/mapred/staging/hadoop/.staging/job_201308300823_0001/job.jar. Name node is in safe mode. The ratio of reported blocks 0.7456 has not reached the threshold 0.9990. Safe mode will be turned off automatically. Fsck on path '/' FAILED |
safemodeとは
そもそもnameodeは通常の動作として、起動時には状態がsafemodeである。
safenodeのまま待機をしているうちに、datanodeが起動し、保管しているブロックの報告をnamenodeに行う。
namenodeは、充分なブロックの確認ができれば自動的にsafemodeを出る。
「充分なブロック」がどれくらいか、は設定できる。
safemodeのときは読み取り専用になり、複製や消去もできないが、手動でsafemodeに入ったり出たりすることができる。
以下、公式からの引用
Safe mode is entered automatically at Namenode startup, and leaves safe mode automatically when the configured minimum percentage of blocks satisfies the minimum replication condition. Safe mode can also be entered manually, but then it can only be turned off manually as well.
Safe mode maintenance command. Safe mode is a Namenode state in which it
1. does not accept changes to the name space (read-only)
2. does not replicate or delete blocks.
今回、問題の発生したnamenodeはdatanodeも兼ねている。
電源瞬断でブロックが壊れているからブロックの報告はできないし、そもそもnamenodeが保管しているメタデータも壊れている。
ボロボロである。
したがって、いつまで待ってもsafemodeから出るはずがない。
そこで手動でsafemodeを解除する。
safemodeの操作
safemodeの操作はhadoop dfsadmin -safemodeに続けて行う。
getで状態を得る。
enterでsafemodeに入る。
leaveでsafemodeから出る。
面白いのは、wait。
safemodeから出たらコマンド実行する、というもの。
1 2 3 4 5 6 7 8 9 10 11 |
# 状態を得る。 $ hadoop dfsadmin -safemode get # 終わってからコマンド実行 $ hadoop dfsadmin -safemode wait # safemodeに入る。 $ hadoop dfsadmin -safemode enter # safemodeから出る。 $ hadoop dfsadmin -safemode leave |
以下、実際の例。
safe modeがONになっているので、OFFに。
1 2 3 4 5 |
$ hadoop dfsadmin -safemode get Safe mode is ON $ hadoop dfsadmin -safemode leave Safe mode is OFF |
改めてfsck / -delete
blockが2000個くらい消えた。ま、まあ勉強用だし(震え声)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ hadoop fsck / -delete FSCK started by hadoop from /172.29.17.159 for path / at Wed Dec 25 19:05:54 JST 2013 (略) .......Status: HEALTHY Total size: 29928657533 B Total dirs: 5321 Total files: 10589 Total blocks (validated): 7319 (avg. block size 4089173 B) Minimally replicated blocks: 7319 (100.0 %) Over-replicated blocks: 0 (0.0 %) Under-replicated blocks: 7319 (100.0 %) Mis-replicated blocks: 0 (0.0 %) Default replication factor: 2 Average block replication: 1.0 Corrupt blocks: 0 Missing replicas: 7319 (100.0 %) Number of data-nodes: 1 Number of racks: 1 FSCK ended at Wed Dec 25 19:05:55 JST 2013 in 1696 milliseconds The filesystem under path '/' is HEALTHY |
HEALTYになったので、これでhadoopが使える状態に戻った。
以上。