Version 3 (modified by jazz, 14 years ago) (diff) |
---|
狀況一:名稱空間不一致(namespaceID mismatch)
- [主因] 通常發生於不正確操作 NameNode,多次重新 format NameNode,導致 NameNode 與 DataNode 的 namespaceID 不一致。
- [現象] 在 NameNode 管理介面(50070埠)看不到 Live Node。執行 jps 時看不到 DataNode 或者 DataNode 有跑,過一陣子就不見了。
- [診斷] 觀察 ${hadoop.log.dir} 的 hadoop-${user.id}-datanode-${hostname}.log 應會出現錯誤訊息如下:
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
- 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