HBase表的備份


HBase表備份其實就是先將Table導出,再導入兩個過程。

導出過程

//hbase org.apache.hadoop.hbase.mapreduce.Driver export 表名 數據文件位置
//數據文件位置:可以是本地文件目錄,也可以是hdfs路徑
//當其為前者時,必須加上前綴file://
//當其為后者時,可以直接指定 "/root/test/users",也可以寫路徑 "hdfs://hadoop01:9000/root/test/users"
//另外,該接口類還提供了一些其它的方法。例如表與表之間的數據拷貝,導入tsv文件(一種數據間以制表符分割的文件)等
//如果"/root/test/users/" 目錄已存在則會報錯。【
表名不用添加引號】

[root@ncst conf]# hbase org.apache.hadoop.hbase.mapreduce.Driver export users file:///root/test/users

注意:這是一個沒有reduce的MR過程,從產生的結果文件"/root/test/users/part-m-00000" 可以看出。

導入過程
//hbase org.apache.hadoop.hbase.mapreduce.Driver import 表名 數據文件位置
//數據文件位置:可為本地文件目錄,也可以為hdfs的路徑。
//當其為前者時,必須加上前綴file://
//當其為后者時,可以直接指定 "/root/test/users",也可以寫路徑 "hdfs://hadoop01:9000/root/test/users"

//新的表必須存在,否則報錯
//如果導出的數據很多,導入的時候千萬不要把所有的part-m-0000*文件都放到一個目錄下開始導入,肯定會失敗的!
//應該將part-m-0000*文件一個個開始導入

[root@ncst conf]# hbase org.apache.hadoop.hbase.mapreduce.Driver import bak file:///root/test/users

hbase集群間數據遷移方法總結

一、需要在hbase集群停掉的情況下遷移
步驟:
(1)執行hadoop distcp -f filelist "hdfs://new cluster ip:9000/hbasetest"
(2)在new cluster執行./hbase org.jruby.main add_table.rb /hbase/table20111222,將拷貝來的表加入到.meat.中(會出現region的數目不一致的問題,這個需要重啟hase才能解決)
說明:(1)filelist為hdfs上的列表文件,內容如下:
/hbase/table20111222
/hbase/table20120131
(2)如果兩個集群的hadoop版本不一致,需要在new cluster上執行hadoop distcp,否則會出現讀寫異常;
二、在集群運行的時候進行數據遷移
1、replication:這個是動態的備份(可以理解為實時備份)
步驟:(1)在old cluster將需要遷移的表屬性進行修改:
disable 'your_table'
alter 'your_table', {name => 'family_name', replication_scope => '1'}
enable 'your_table'
(2)打開new cluster集群的replication,修改hbase-site.xml
<property>
<name>hbase.replication</name>
<value>true</value>
</property>
(3)添加peer,在new cluster的hbase shell中執行:add_peer '1','old cluster ip:2181:/hbase',啟動replication,執行start_replication
說明:需要兩個集群的hadoop版本一致,否則出現讀寫錯誤

2、copytable:可以在本集群中拷貝一張表,也可以將表拷貝到其他的集群中。

$ bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] tablename 
//Demo例子
$ bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable
--starttime=1265875194289 --endtime=1265878794289
--peer.adr=server1,server2,server3:2181:/hbase TestTable 

命令:./hbase org.apache.hadoop.hbase.mapreduce.copytable --peer.adr=new cluster ip:2181:/hbase zy_test
說明:拷貝完成,不需要重啟機器,在new cluster中就可以看到該表;
3、export and import
步驟:(1)在old cluster上執行:./hbase org.apache.hadoop.hbase.mapreduce.export test hdfs://new cluster ip:9000/zhuangyang/test
(2)在new cluster上執行:./hbase org.apache.hadoop.hbase.mapreduce.import test hdfs://new cluster ip:9000/zhuangyang/test
說明:(1)一定要寫全路徑,不能寫相對路勁;
(2)在import前,需要將表事先在new cluster中創建好.

以上都是在old cluster和new cluster網絡相通的情況下實現數據遷移的辦法。
如果兩個集群網絡不通,只能先將old cluster中的數據都下載到本地或者其他的地方,然后在人工的轉移到new cluster上了 

導入tsv文件到hbase
1、將文件放到hdfs

hadoop fs -put ./hly.tsv /user/amy/input/

2、使用如下命令導入tsv

直接導入方式:

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,info:age,info:sex T_Name /user/amy/input/

bulk load方式:

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.bulk.output=/user/hadoop/data  -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,info:age,info:sex T_Name /user/amy/input/
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /user/hadoop/data/T_Name T_Name 


免責聲明!

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



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