[[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 }}} * [解法] 手動修改 ${hadoop.tmp.dir}/dfs/data/current/VERSION 逐一把每個 !DataNode 的 namespaceID 改成跟新的 !NameNode 一致,並逐一重新啟動 !DataNode {{{ #!diff - namespaceID=174598545 + namespaceID=773481889 }}} === 在 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 }}} * 嘗試跟據解法,修復 !DataNode 的 namespaceID。 - 修改 ${hadoop.tmp.dir}/dfs/data/current/VERSION 並使用以下指令重新啟動 datanode {{{ $ cygstart wordpad $(cygpath -w /cygdrive/c/var/hadoop/dfs/data/current/VERSION) $ /opt/hadoop/bin/hadoop-daemon.sh start datanode }}} == 狀況二:進入安全模式(safe mode) == * [主因] 通常發生於 !DataNode 有多台同時掛點,備援節點還夠的狀況。會顯示 Safe mode is ON. 的訊息於 http://namenode:50070 * [解法] 通常根據錯誤訊息進行排解,若為 !DataNode 節點低於某個比例造成,僅需恢復 !DataNode 連線即可。亦可強制以指令方式離開 Safe mode。 {{{ ~$ /opt/hadoop/bin/hadoop dfsadmin -safemode leave Safe mode is ON }}} === 在 hadoop4win 環境中模擬錯誤產生 === * 使用指令強制進入 Safe mode ,然後觀察 http://localhost:50070 的頁面。 {{{ ~$ /opt/hadoop/bin/hadoop dfsadmin -safemode enter Safe mode is ON }}} * 使用指令強制離開 Safe mode ,然後觀察 http://localhost:50070 的頁面。 {{{ ~$ /opt/hadoop/bin/hadoop dfsadmin -safemode leave Safe mode is OFF }}} == 狀況三:區塊遺失(missing blocks) == * [主因] 當 !DataNode 掛點數量高於一定量,造成有 block 無法找到副本時,就會在 http://namenode:50070 看到 missing blocks 的訊息。 * [解法] 若恢復 !DataNode 仍無法解決時,可執行 fsck 將已經找不到的檔案移到 HDFS 的 /lost+found === 在 hadoop4win 環境中模擬錯誤產生 === * 進入 /var/hadoop/dfs/data/current 移除部份 blk_* 的檔案。 * 執行 fsck 檢查遺失的 block 有哪些。 {{{ ~$ /opt/hadoop/bin/hadoop fsck / }}}