wiki:Hinet110303/Demo1

狀況一:名稱空間不一致(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
    

狀況二:進入安全模式(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 /
    
Last modified 13 years ago Last modified on Mar 3, 2011, 10:33:39 PM