使用HBase提供的類把HBase中某張表的數據導出到HDFS,之后再導出到測試hbase表中。
(1) ==從hbase表導出到HDFS==
[hadoop@node01 shells]$ hbase org.apache.hadoop.hbase.mapreduce.Export myuser /hbase_data/myuser_bak
(2) ==文件導入hbase表==
hbase shell中創建備份目標表
create 'myuser_bak','f1','f2'
將HDFS上的數據導入到備份目標表中
hbase org.apache.hadoop.hbase.mapreduce.Driver import myuser_bak /hbase_data/myuser_bak/*
補充說明
以上都是對數據進行了全量備份,后期也可以實現表的增量數據備份,增量備份跟全量備份操作差不多,只不過要在后面加上時間戳。
例如:
HBase數據導出到HDFS
hbase org.apache.hadoop.hbase.mapreduce.Export test /hbase_data/test_bak_increment 開始時間戳 結束時間戳
通過snapshot快照的方式實現HBase數據的遷移和拷貝。這種方式比較常用,效率高,也是最為推薦的數據遷移方式。
HBase的snapshot其實就是一組==metadata==信息的集合(文件列表),通過這些metadata信息的集合,就能將表的數據回滾到snapshot那個時刻的數據。
snapshot 'tableName', 'snapshotName'
2、查看snapshot
list_snapshots
? 查找以test開頭的snapshot
list_snapshots 'test.*'
? ps:這里需要對表進行disable操作,先把表置為不可用狀態,然后在進行進行restore_snapshot的操作
disable 'tableName'
restore_snapshot 'snapshotName'
enable 'tableName'
4、刪除snapshot
delete_snapshot 'snapshotName'
5、遷移 snapshot
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot snapshotName \
-copy-from hdfs://src-hbase-root-dir/hbase \
-copy-to hdfs://dst-hbase-root-dir/hbase \
-mappers 1 \
-bandwidth 1024
例如:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot test \
-copy-from hdfs://node01:8020/hbase \
-copy-to hdfs://node01:8020/hbase1 \
-mappers 1 \
-bandwidth 1024
? 注意:這種方式用于將快照表遷移到另外一個集群的時候使用,使用MR進行數據的拷貝,速度很快,使用的時候記得設置好bandwidth參數,以免由于網絡打滿導致的線上業務故障。
6、將snapshot使用bulkload的方式導入
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
hdfs://dst-hbase-root-dir/hbase/archive/datapath/tablename/filename \
tablename
例如:
創建一個新表
create 'newTest','f1','f2'
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://node1:9000/hbase1/archive/data/default/test/6325fabb429bf45c5dcbbe672225f1fb newTest
dIncrementalHFiles hdfs://node1:9000/hbase1/archive/data/default/test/6325fabb429bf45c5dcbbe672225f1fb newTest
##
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。