Hadoop遷移Namenode

一.前提及方案
 
操作版本:社區版 Hadoop-1.0.3,其他版本不保證
 
之前HBase沒有考慮壓縮,經過一段時間的研究和測試,打算在HBase中全面採用snappy壓縮庫。但是在節點上配置snappy時,發現其要求glibc版本在2.5+,而當前系統CentOS-4.8的glibc是2.3.4,CentOS-4.8不支持獨立升級glibc到2.5+,所以只能整個集羣升級系統到CentOS5。逐臺升級,這就牽扯到Namenode節點也要升級,這就需要在不丟失數據的情況下將Namenode遷移到其他服務器,特在此記錄操作流程,供後續參考。
 
因爲集羣初始時沒有設置SecondaryNamenode,一開始考慮覺得還挺困難,但是後來仔細一想,其實Hadoop集羣是“機器不相關”(或者IP不相關?)的,無論是那臺機器做Namenode,只要配置指向該節點,且該節點文件路徑與原Namenode一致,則其他Datanode節點就應該會很傻很天真的以爲它就是Namenode節點。
 
二. edits和fsimage介紹
 
集羣NameNode把文件系統(HDFS)的變化追加保存到日誌文件edits中。
 
當NameNode啓動時,會從鏡像文件 fsimage 中讀取HDFS的狀態,並且把edits文件中記錄的操作應用到fsimage,也就是合併到fsimage中去。合併後更新fsimage的HDFS狀態,創建一個新的edits文件來記錄文件系統的變化。
 
與此相關的主要文件存儲位置在hdfs-site.xml中設置 :

<property>

        <name>dfs.name.dir</name>

        <value>/data1/hadoopdata1/dfs/name,/data1/hadoopdata2/dfs/name</value>

</property>

三. 具體操作步驟
 
1. 停掉Hadoop及相關集羣
 
2. 備份dfs.name.dir所指向的目錄及文件
 
3. 修改$HADOOP_HOME/conf/下配置文件
 •修改core-site.xml中fs.default.name,將原hostname改爲新主機hostname
 •修改mapred-site.xml中mapred.job.tracker,將原hostname改爲新主機hostname
 •檢查slaves文件和master文件(因爲很多時候是從原集羣中剝離一臺機器,所以要特別注意是否有遺漏)
 •修改其他相關配置文件的配置(如有HBase,需要修改hbase-site.xml中hbase.rootdir等,所以儘量仔細檢查各個配置文件)
 
4. 建立新Namenode到其自身及其他Datanode節點間的互信
 
5. 將第2步中備份的文件拷貝到新Namenode節點,且按照原Namenode文件結構放置文件
 
6. 將第3步中修改後的配置文件分發到其他Datanode節點
 
7. 啓動HDFS,查看NameNode、SecondaryNameNode和各個DataNode狀態是否正常
 
8. 啓動MapReduce,查看TaskTracker、ZooKeeper、RegionServer狀態是否存在異常

相關閱讀: Hive遷移Hadoop namenode時遇到的問題 http://www.linuxidc.com/Linux/2012-07/66770.htm



http://www.linuxidc.com/Linux/2013-08/88956.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章