由于公司前期沒法及時提供生成環(huán)境的服務(wù)器决乎,導(dǎo)致現(xiàn)有的業(yè)務(wù)開發(fā)在現(xiàn)有的服務(wù)器進(jìn)行,HBase相關(guān)的數(shù)據(jù)在后期需要遷移到新的環(huán)境里。HBase數(shù)據(jù)遷移方式有以下幾種:
CopyTable方式?
hbase org.apache.hadoop.hbase.mapreduce.CopyTable [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] tablename
操作:
- starttime 執(zhí)行時間范圍的開始時間肤京,未指定endtime則為讀取starttime之后的所有數(shù)據(jù)
- endtime 執(zhí)行時間范圍的結(jié)束時間篙贸,未指定starttime則為第一條數(shù)據(jù)入庫的時間到endtime之間的所有數(shù)據(jù)
- new.name 用于copytable時指定你要拷貝后的新表名稱
- peer.adr 指定集群zookeeper地址
- tablename 為要復(fù)制的表明
案例:將old_table表中的數(shù)據(jù)遷移到new_table表中
./hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=gs-yy-slave1,gs-yy-slave2,gs-yy-slave3:2181:/hbase --new.name=new_table old_table
Export/Import 方式?
格式:
- bin/hbase org.apache.hadoop.hbase.mapreduce.Export testtable /user/testtable [versions] [starttime] [stoptime]
- bin/hbase org.apache.hadoop.hbase.mapreduce.Import testtable /user/testtable
步驟:
①在old cluster上執(zhí)行:
./hbase org.apache.hadoop.hbase.mapreduce.Export test hdfs://new cluster ip:9000/zhuangyang/test
②在new cluster上執(zhí)行:
./hbase org.apache.hadoop.hbase.mapreduce.Import test hdfs://new cluster ip:9000/zhuangyang/test
說明:
①一定要寫全路徑,不能寫相對路勁;
②在import前爵川,需要將表事先在new cluster中創(chuàng)建好.
③以上都是在old cluster和new cluster網(wǎng)絡(luò)相通的情況下實現(xiàn)數(shù)據(jù)遷移的辦法
快照方式?
生成快照:
hbase> snapshot 'myTable','myTableSnapshot-20170727'
列出當(dāng)前所有得快照:
hbase> list_snapshots
刪除快照信息:
hbase> delete_snapshot'myTableSnapshot-20170727'
基于快照,clone一個新表:
hbase> clone_snapshot'myTableSnapshot-20170727', 'myNewTestTable'
基于快照恢復(fù)表:
hbase> disable 'myTable'
hbase> restore_snapshot'myTableSnapshot-20170727'
導(dǎo)出到另外一個集群中:
$bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot myTableSnapshot-20170727 -copy-to hdfs:///srv2:8082/hbase -mappers 16
案例???????????????????????
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot user_data_snapshot -copy-to hdfs://192.168.1.45/hbase/ -mappers 8
直接拷貝hdfs對應(yīng)的文件?
首先拷貝hdfs文件
bin/hadoop distcp hdfs://192.168.1.45/hbase/testtable/ hdfs://192.168.1.45/hbase/testtable/
然后在目的hbase上執(zhí)行
bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable
生成meta信息后寝贡,重啟hbase
這個操作是簡單的方式扒披,操作之前可以關(guān)閉hbase的寫入,執(zhí)行flush所有表(上面有介紹),再distcp拷貝碟案。
案例?
create 'user_data',{NAME => 'info', VERSIONS => 2}
Export/Import
hbase org.apache.hadoop.hbase.mapreduce.Export user_data(要導(dǎo)出的表名) hdfs://192.168.1.45/user/gaoht/user_data(將表數(shù)據(jù)包導(dǎo)出到hdfs上的哪個位置)
hbase org.apache.hadoop.hbase.mapreduce.Import user_data(要導(dǎo)入的表名) hdfs://192.168.1.45/user/gaoht/user_data(將表數(shù)據(jù)從hdfs上的這個位置導(dǎo)入到表中)
hbase org.apache.hadoop.hbase.mapreduce.Export user_data hdfs://192.168.1.45/user/gaoht/user_data
hbase org.apache.hadoop.hbase.mapreduce.Import user_data hdfs://192.168.1.45/user/gaoht/user_data
snapshot快照方式
bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot user_data_snapshot -copy-to hdfs:///srv2:8082/hbase -mappers 8
操作:
hbase> snapshot 'myTable','user_data_snapshot'
列出當(dāng)前所有得快照:
hbase> list_snapshots
刪除快照信息:
hbase> delete_snapshot'user_data_snapshot'
基于快照,clone一個新表:
hbase> clone_snapshot'user_data_snapshot', 'myNewTestTable'
基于快照恢復(fù)表,它需要先禁用表颇蜡,再進(jìn)行恢復(fù):
hbase> disable 'myTable'
hbase> restore_snapshot'user_data_snapshot'
案例:將表創(chuàng)建一個快照 然后將快照copy到新集群相應(yīng)的位置進(jìn)行恢復(fù)這個表數(shù)據(jù)
snapshot 'user_data', 'user_data_snapshot'
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot user_data_snapshot -copy-to hdfs://new_cluster/hbase/ -mappers 8
相關(guān)文章1?
相關(guān)文章2?
相關(guān)文章3?
相關(guān)文章4?