| 1 | [[PageOutline]] |
| 2 | |
| 3 | == 狀況一:名稱空間不一致(namespaceID mismatch) == |
| 4 | |
| 5 | * [主因] 通常發生於不正確操作 !NameNode,多次重新 format !NameNode,導致 !NameNode 與 !DataNode 的 namespaceID 不一致。 |
| 6 | * [現象] 在 NameNode 管理介面(50070埠)看不到 Live Node。執行 jps 時看不到 !DataNode 或者 !DataNode 有跑,過一陣子就不見了。 |
| 7 | * [診斷] 觀察 ${hadoop.log.dir} 的 hadoop-${user.id}-datanode-${hostname}.log 應會出現錯誤訊息如下: |
| 8 | {{{ |
| 9 | #!text |
| 10 | 2011-03-03 13:06:46,312 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: |
| 11 | java.io.IOException: Incompatible namespaceIDs in C:\var\hadoop\dfs\data: namenode |
| 12 | namespaceID = 773481889; datanode namespaceID = 174598545 |
| 13 | }}} |
| 14 | * [解法] (1) 手動修改 ${hadoop.tmp.dir}/dfs/name/current/VERSION 改成跟現存 !DataNode 的namespaceID 一致,並重新啟動 !NameNode |
| 15 | * [解法] (2) 手動修改 ${hadoop.tmp.dir}/dfs/data/current/VERSION 逐一把每個 !DataNode 的 namespaceID 改成跟新的 !NameNode 一致,並逐一重新啟動 !DataNode |
| 16 | {{{ |
| 17 | #!diff |
| 18 | - namespaceID=773481889 |
| 19 | + namespaceID=174598545 |
| 20 | }}} |
| 21 | |
| 22 | === 在 hadoop4win 環境中模擬錯誤產生 === |
| 23 | |
| 24 | * 首先停掉目前正在運行中的 hadoop |
| 25 | {{{ |
| 26 | ~$ stop-hadoop |
| 27 | }}} |
| 28 | * 接著確認切換至 hadoop 安裝目錄 |
| 29 | {{{ |
| 30 | ~$ cd /opt/hadoop |
| 31 | }}} |
| 32 | * 重新 format !NameNode |
| 33 | {{{ |
| 34 | $ bin/hadoop namenode -format |
| 35 | 11/03/03 13:04:25 INFO namenode.NameNode: STARTUP_MSG: |
| 36 | /************************************************************ |
| 37 | STARTUP_MSG: Starting NameNode |
| 38 | STARTUP_MSG: host = ${HOSTNAME}/${IP} |
| 39 | STARTUP_MSG: args = [-format] |
| 40 | STARTUP_MSG: version = 0.20.2 |
| 41 | STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/b |
| 42 | ranch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010 |
| 43 | ************************************************************/ |
| 44 | Re-format filesystem in \var\hadoop\dfs\name ? (Y or N) Y |
| 45 | 11/03/03 13:04:32 INFO namenode.FSNamesystem: fsOwner=chtti,None,root,Administra |
| 46 | tors,Users,Debugger,Users |
| 47 | 11/03/03 13:04:32 INFO namenode.FSNamesystem: supergroup=supergroup |
| 48 | 11/03/03 13:04:32 INFO namenode.FSNamesystem: isPermissionEnabled=true |
| 49 | 11/03/03 13:04:32 INFO common.Storage: Image file of size 95 saved in 0 seconds. |
| 50 | |
| 51 | 11/03/03 13:04:32 INFO common.Storage: Storage directory \var\hadoop\dfs\name ha |
| 52 | s been successfully formatted. |
| 53 | 11/03/03 13:04:32 INFO namenode.NameNode: SHUTDOWN_MSG: |
| 54 | /************************************************************ |
| 55 | SHUTDOWN_MSG: Shutting down NameNode at ${HOSTNAME}/${IP} |
| 56 | ************************************************************/ |
| 57 | }}} |
| 58 | * 重新啟動 hadoop |
| 59 | {{{ |
| 60 | /opt/hadoop $ start-hadoop |
| 61 | }}} |
| 62 | * 隔幾秒後,執行 jps 確認 !DataNode 是否還活著 |
| 63 | {{{ |
| 64 | $ jps |
| 65 | 5960 TaskTracker |
| 66 | 2836 SecondaryNameNode |
| 67 | 3400 JobTracker |
| 68 | 3252 NameNode |
| 69 | 5512 Jps |
| 70 | }}} |
| 71 | * 觀察 !DataNode 的錯誤訊息 |
| 72 | {{{ |
| 73 | $ cygstart wordpad logs/hadoop-${USER}-datanode-${HOSTNAME}.log |
| 74 | }}} |
| 75 | * 嘗試跟據解法(1),修復 !NameNode 的 namespaceID。 - 修改 ${hadoop.tmp.dir}/dfs/name/current/VERSION 並使用以下指令重新啟動 namenode 與 datanode |
| 76 | {{{ |
| 77 | $ /opt/hadoop/bin/hadoop-daemon.sh stop namenode |
| 78 | $ /opt/hadoop/bin/hadoop-daemon.sh start namenode |
| 79 | $ /opt/hadoop/bin/hadoop-daemon.sh start datanode |
| 80 | }}} |
| 81 | |
| 82 | == 狀況二:進入安全模式(safe mode) == |
| 83 | == 狀況三:區塊遺失(missing blocks) == |