HBase表的備份

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

導出過程apache

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

[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*文件一個個開始導入tcp

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

hbase集羣間數據遷移方法總結oop

1、須要在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,不然會出現讀寫異常;
2、在集羣運行的時候進行數據遷移
一、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版本一致,不然出現讀寫錯誤

二、copytable:能夠在本集羣中拷貝一張表,也能夠將表拷貝到其餘的集羣中。spa

$ 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中就能夠看到該表;
三、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上了 code

導入tsv文件到hbase
一、將文件放到hdfsserver

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

二、使用以下命令導入tsvxml

直接導入方式:

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 
相關文章
相關標籤/搜索