badqiu

          XPer
          隨筆 - 46, 文章 - 3, 評論 - 195, 引用 - 0
          數據加載中……

          hadoop 集群升級失敗記錄

          一.錯誤概述

           

          因為需要使用hadoop與hbase結合使用,所以需要為hadoop hdfs升級使用append寫模式。需要對現有的hadoop 0.20.1 升級至0.20.205.0; 升級過程簡單的使用 hadoop namenode -upgrade 從 -18 version => -32version(這個是dfs/name/current/VERSION).但我們發現0.20.205跟hive不兼容,所以又安裝facebook的hadoop版本(-30版本)。

           

          整個升級流程簡單來說就是: dfs/name/current/VERSION -18 => -32 => -30. 升級再回滾的過程。

           

           

          二. namenode錯誤處理過程

          1。啟動namenode失敗(第一個錯誤):

           

          org.apache.hadoop.hdfs.server.common.IncorrectVersionException: Unexpected version of storage directory /data/hadoop-tmp/hadoop-hadoop/dfs/name. Reported: -32. Expecting = -30.
           at org.apache.hadoop.hdfs.server.common.Storage.getFields(Storage.java:662)
           at org.apache.hadoop.hdfs.server.namenode.FSImage.getFields(FSImage.java:741)
           at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.read(Storage.java:238)
           at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.read(Storage.java:227)
           at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:453)
           at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:158)
           at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:386)
           at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:361)
           at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:274)
           at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:385)
           at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1419)
           at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1428)

           

           

          解決辦法:

          在namenode節點運行:

           hadoop namenode -rollback

          將-32版本回滾至 -18版本

           

           

          2。繼續啟動namenode(第二個錯誤):

           

          org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /data/hadoop-tmp/hadoop-hadoop/dfs/name is in an inconsistent state: file VERSION has image MD5 digest when version is -18
           

          解決辦法:

          將dfs/name/current/VERSION中的 imageMD5Digest 注釋掉,不進行MD5完整性檢查。

           

          3。再將升級-18 => -30版本

           

          hadoop namenode -upgrade

           

          這樣namenode已經啟動成功。

          三.datanode錯誤處理過程

          1。啟動datanode

           

          2011-12-12 18:06:18,544 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Failed to start datanode org.apache.hadoop.hdfs.server.common.IncorrectVersionException: Unexpected version of storage directory /data/hadoop-tmp/hadoop-hadoop/dfs/data. Reported: -32. Expecting = -30.
           

          解決辦法:

           

          hadoop datanode -rollback

           

          回滾至 -18版本,再升級至-30版本.

          hadoop datanode -upgrade

          2. 繼續啟動datanode

           

          11/12/12 19:34:26 INFO datanode.DataNode: Failed to start datanode org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /data/hadoop-tmp/hadoop-hadoop/dfs/data is in an inconsistent state: previous and previous.tmp cannot exist together.
           at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:427)
           at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:113)
           at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:332)
           at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:249)
           at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1528)
           at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1477)
           at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1485)
           at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1626)

           

          解決辦法:

          直接查看源碼,發現Storage$StorageDirectory.analyzeStorage()完全是進行相關目錄的狀態檢查。而且跟生產環境的hadoop集群對比,發現沒有previous,previous.tmp 兩個目錄(是升級的備份文件),所以將這兩個目錄重命名。然后繼續啟動datanode成功。

          最后通過  hadoop namenode -finalize 來結束此次升級,以便刪除升級的備份文件

           

          四.本次處理總結:

          1. 對你的hadoop namenode數據及時做好備份,不管是否是測試集群

          2. 查看hadoop源碼吧,有時處理問題還是得看源碼,因為在google上搜索,資料還是相當少的。

           

           

           

           

          posted on 2011-12-12 20:30 badqiu 閱讀(3087) 評論(2)  編輯  收藏

          評論

          # re: hadoop 集群升級失敗記錄  回復  更多評論   

          學習了,方法好
          2011-12-12 22:15 | tbw淘寶

          # re: hadoop 集群升級失敗記錄  回復  更多評論   

          學習了
          2011-12-13 11:01 | tb

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 梁平县| 汨罗市| 马鞍山市| 那坡县| 平阳县| 从化市| 台中市| 庆城县| 灌阳县| 台山市| 左权县| 泾川县| 清丰县| 衡南县| 徐汇区| 凉山| 霞浦县| 抚顺县| 泽普县| 江西省| 康马县| 吉林省| 洞口县| 九龙坡区| 建德市| 南江县| 徐州市| 沂水县| 奉新县| 遂溪县| 四会市| 衡山县| 兴文县| 虞城县| 垦利县| 五台县| 台安县| 两当县| 鹤山市| 亳州市| 米泉市|