Hadoop遷移Namenode


個人小站,正在持續整理中,歡迎訪問:http://shitouer.cn

小站博文地址: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狀態是否存在異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM