相同版本的CDH集群間遷移hdfs以及hbase


前言

  由於項目數據安全的需要,這段時間看了下hadoop的distcp的命令使用,不斷的糾結的問度娘,度娘告訴我的結果也讓我很糾結,都是抄來抄去,

還好在犧牲大量的時間的基礎上還終於搞出來了,順便寫這個隨筆,記錄下。

環境

  目前我們是兩套同版本的CDH集群,集群內的節點通信使用的私網,提供浮動ip對外通信,也就是說,兩個集群間的私網是不互通的,只能通過浮動ip

進行通信。

操作

使用hadoop提供的distcp命令進行數據遷移 (數據源集群source和目標集群target版本相同)

遷移hdfs的文件

1)、將source的hosts配置復制到target的hosts中  , 注意使用source的節點的浮動ip

2)、由於集群的節點是以私網的方式通信,如果是這種情況,必須開啟namenode和datanode都綁定到了0.0.0.0 ,不然會報連接拒絕的異常

2)、在target的namenode中進入hdfs用戶 (為的是避免寫hdfs出現 權限問題 ) 

3)、在tartget的namenode中使用命令 hadoop distcp -overwrite -i webhdfs://sourceNN:50070/solr webhdfs://targetNN:50070/ 

  (說明: 中間的參數 不明白 ,可以問度娘或自己看官方文檔,

 sourceNN source集群的NameNode, 由於不能使用私網通信,所以只能選擇 webhdfs, 端口是cdh默認的端口50070)

遷移hbase   推薦使用方案二 簡單 效率高

方案1

4)、直接使用HBASE提供的exort和import工具,這些工具包含在HBASE的jar包中。他們使用MAPREDUCE進行導入導出操作,可以將部分或全部表寫入到HDFS文件中。
hadoop jar hbase-0.94.10.jar export -Dhbase.client.scanner.caching=100 weather_data /weather_data
export命令后面,用戶必須從左到右指定參數,不能省略這中間任何一個參數。

5)、使用distcp命令將導出的文件復制到目標集群以后再使用導入命令進行導入。

6)、HBASE數據導入
hadoop jar hbase-0.94.10.jar import weather_data /weather_data


方案2:

7)、在tartget的namenode中執行 hadoop distcp webhdfs://sourceNN:50070/hbase/data/default hdfs://targetNN:50070/hbase/data/       遷移hbase中命名空間是default的所有的表

8)、遷移完成之后,啟動hbase集群服務,並執行如下的兩個命令,恢復元數據,否則hbase集群不會識別新遷移過來的表:
hbase hbck -fix
hbase hbck -repairHoles
注意 : 可能會有權限問題, 通過提升權限或換用戶解決)


總結

1)、出現異常,根據異常問度娘,有條件最好問谷歌, 多看官方文檔,檢查是否參數使用正確。


2)、假如distcp一個目錄時出現 file not exist 異常,有可能是目錄過大導致的,可以試着減少distcp的文件目錄數量,假如還報異常,那還是檢查下是不是參數有問題。

 

3)、認真分析自己使用distcp碰到的問題, 不可盲從百度出的結果。


免責聲明!

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



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