[[PageOutline]] == 狀況一:名稱空間不一致(namespaceID mismatch) == * [主因] 通常發生於不正確操作 !NameNode,多次重新 format !NameNode,導致 !NameNode 與 !DataNode 的 namespaceID 不一致。 * [現象] 在 NameNode 管理介面(50070埠)看不到 Live Node。執行 jps 時看不到 !DataNode 或者 !DataNode 有跑,過一陣子就不見了。 * [診斷] 觀察 ${hadoop.log.dir} 的 hadoop-${user.id}-datanode-${hostname}.log 應會出現錯誤訊息如下: {{{ #!text 2011-03-03 13:06:46,312 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in C:\var\hadoop\dfs\data: namenode namespaceID = 773481889; datanode namespaceID = 174598545 }}} * [解法] (1) 手動修改 ${hadoop.tmp.dir}/dfs/name/current/VERSION 改成跟現存 !DataNode 的namespaceID 一致,並重新啟動 !NameNode * [解法] (2) 手動修改 ${hadoop.tmp.dir}/dfs/data/current/VERSION 逐一把每個 !DataNode 的 namespaceID 改成跟新的 !NameNode 一致,並逐一重新啟動 !DataNode {{{ #!diff - namespaceID=773481889 + namespaceID=174598545 }}} === 在 hadoop4win 環境中模擬錯誤產生 === * 首先停掉目前正在運行中的 hadoop {{{ ~$ stop-hadoop }}} * 接著確認切換至 hadoop 安裝目錄 {{{ ~$ cd /opt/hadoop }}} * 重新 format !NameNode {{{ $ bin/hadoop namenode -format 11/03/03 13:04:25 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = ${HOSTNAME}/${IP} STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.20.2 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/b ranch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010 ************************************************************/ Re-format filesystem in \var\hadoop\dfs\name ? (Y or N) Y 11/03/03 13:04:32 INFO namenode.FSNamesystem: fsOwner=chtti,None,root,Administra tors,Users,Debugger,Users 11/03/03 13:04:32 INFO namenode.FSNamesystem: supergroup=supergroup 11/03/03 13:04:32 INFO namenode.FSNamesystem: isPermissionEnabled=true 11/03/03 13:04:32 INFO common.Storage: Image file of size 95 saved in 0 seconds. 11/03/03 13:04:32 INFO common.Storage: Storage directory \var\hadoop\dfs\name ha s been successfully formatted. 11/03/03 13:04:32 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at ${HOSTNAME}/${IP} ************************************************************/ }}} * 重新啟動 hadoop {{{ /opt/hadoop $ start-hadoop }}} * 隔幾秒後,執行 jps 確認 !DataNode 是否還活著 {{{ $ jps 5960 TaskTracker 2836 SecondaryNameNode 3400 JobTracker 3252 NameNode 5512 Jps }}} * 觀察 !DataNode 的錯誤訊息 {{{ $ cygstart wordpad logs/hadoop-${USER}-datanode-${HOSTNAME}.log }}} * 嘗試跟據解法(1),修復 !NameNode 的 namespaceID。 - 修改 ${hadoop.tmp.dir}/dfs/name/current/VERSION 並使用以下指令重新啟動 namenode 與 datanode {{{ $ /opt/hadoop/bin/hadoop-daemon.sh stop namenode $ /opt/hadoop/bin/hadoop-daemon.sh start namenode $ /opt/hadoop/bin/hadoop-daemon.sh start datanode }}} == 狀況二:進入安全模式(safe mode) == == 狀況三:區塊遺失(missing blocks) ==