HBase 實(shí)踐 | 如何跨CDP集群通過(guò)HBase快照遷移數(shù)據(jù)
該文檔主要通過(guò)使用HBase快照導(dǎo)出歷史全量數(shù)據(jù)并還原到新的HBase集群,然后改造源生的ExportSnapshot類,通過(guò)比較變化的文件實(shí)現(xiàn)導(dǎo)出增量,并最終實(shí)現(xiàn)HBase跨集群的增量備份和還原。?
測(cè)試環(huán)境
1.CDH7.1.4、啟用Kerberos、hbase 2.2.3
2.CDP7.1.6 、啟用Kerberos、hbase 2.2.3
3.使用ldapuser1用戶操作
2.1在cdp7.1.4生成一張測(cè)試的表
2.1.1 使用HBase的pe命令生成一個(gè)10G的表
hbase?org.apache.hadoop.hbase.PerformanceEvaluation?--compress=SNAPPY?--size=10?sequentialWrite?10
建表權(quán)限不夠報(bào)錯(cuò)

在ranger配置如下


2.1.2 TestTable表HDFS大小
hadoop?fs?-du?-h?/hbase/data/default/


此處由于指定了TestTable表的壓縮格式為SNAPPY,所以在HDFS上只有2.5GB
2.1.3 TestTable表的總數(shù)據(jù)量,共10485760條數(shù)據(jù)
count?'TestTable'

2.2通過(guò)快照實(shí)現(xiàn)HBase跨集群的全量數(shù)據(jù)備份和還原
2.2.1生成TestTable表快照
snapshot?'TestTable','TestTable-snapshot1'

2.2.2導(dǎo)出TestTable快照數(shù)據(jù)
在命令行使用HBase自帶的ExportSnapshot導(dǎo)出快照
hbase?org.apache.hadoop.hbase.snapshot.ExportSnapshot?-snapshot?TestTable-snapshot1?-copy-to?hdfs://cdp02:8020/tmp/hbasebackup/TestTable-snapshot1

查看導(dǎo)出的快照數(shù)據(jù)
hadoop?fs?-ls?/tmp/hbasebackup/TestTable-snapshot1

hadoop?fs?-du?-h?/tmp/hbasebackup/TestTable-snapshot1

可以看到導(dǎo)出快照實(shí)際是把快照的信息及快照記錄的所有數(shù)據(jù)文件分別導(dǎo)出到指定目錄下的.hbase-snapshot和archive目錄下。
CDSW 產(chǎn)品文檔的格式和內(nèi)容發(fā)生了重大變化。
2.2.3將快照數(shù)據(jù)復(fù)制到cdp7.1.6集群
因?yàn)閮蓚€(gè)集群都有Kerberos認(rèn)證,在用到distcp命令之前,在兩集群之間必須做互信(可聯(lián)系cdh運(yùn)維人員)
hadoop?distcp?hdfs://cdp02:8020/tmp/hbasebackup/TestTable-snapshot1/.hbase-snapshot/TestTable-snapshot1?hdfs://cdh3.macro.com:8020/hbase/.hbase-snapshot
hadoop?distcp?hdfs://cdp02:8020/tmp/hbasebackup/TestTable-snapshot1/archive/data/default/TestTable?hdfs://cdh3.macro.com:8020/hbase/archive/data/default
復(fù)制報(bào)錯(cuò),權(quán)限不足

集群cdp7.1.6ranger配置如下



查看復(fù)制到cdp7.1.6集群上的快照數(shù)據(jù)
hdfs?dfs?-ls?hdfs://cdh3.macro.com:8020/hbase/.hbase-snapshot
hdfs?dfs?-ls?hdfs://cdh3.macro.com:8020/hbase/archive/data/default
hdfs?dfs?-du?-h?hdfs://cdh3.macro.com:8020/hbase/



2.2.4 使用TestTable-snapshot1快照恢復(fù)TestTable表
開通以下權(quán)限,不然會(huì)報(bào)權(quán)限不足的問(wèn)題


如果不開通會(huì)報(bào)下面的錯(cuò)誤


list_snapshots
restore_snapshot?'TestTable-snapshot1'

2.2.5 驗(yàn)證恢復(fù)后的表數(shù)據(jù)是否與快照時(shí)數(shù)據(jù)一致
通過(guò)快照恢復(fù)的數(shù)據(jù)與快照時(shí)的數(shù)據(jù)總條數(shù)一致,表內(nèi)容一致。

2.3通過(guò)快照實(shí)現(xiàn)HBase跨集群的增量數(shù)據(jù)備份和還原
2.3.1 修改TestTable表數(shù)據(jù)
通過(guò)hbase shell修改一條數(shù)據(jù)和增加一條數(shù)據(jù)
put?'TestTable','11111111111111111111111111','info0:AppendTest','1111'
put?'TestTable','00000000000000000000000000','info0:AppendTest','00000'

TestTable表的數(shù)據(jù)總量為10485761
count?'TestTable'

2.3.2 再次創(chuàng)建TestTable表快照
snapshot?'TestTable','TestTable-snapshot2'

2.3.3 導(dǎo)出第二次快照的增量數(shù)據(jù)
這一步主要是將TestTable-snapshot2與TestTable-snapshot1兩次快照之間的增量數(shù)據(jù)導(dǎo)出,HBase默認(rèn)的ExportSnapshot方法是沒有增量快照導(dǎo)出的方法,這里在原有快照導(dǎo)出的基礎(chǔ)上對(duì)源碼進(jìn)行修改,來(lái)完成兩個(gè)快照之間增量數(shù)據(jù)的導(dǎo)出。
github源碼地址:https://github.com/javaxsky/hbaseexport 有編譯好的jar包,下載即可,將里面的balancer.jar和hbase-export-1.0-SNAPSHOT.jar放在目錄“/opt/cloudera/parcels/CDH/lib/hbase/lib”

在命令行執(zhí)行如下命令將兩次快照的增量數(shù)據(jù)導(dǎo)出到HDFS
hbase?org.hadoop.hbase.dataExport.ExportSnapshot?-snapshot?TestTable-snapshot2?-copy-to?hdfs://cdp02:8020/tmp/hbasebackup/snapshot2-snapshot1/?-snapshot-old?TestTable-snapshot1


導(dǎo)出的數(shù)據(jù)目錄
hadoop?fs?-du?-h?/tmp/hbasebackup/snapshot2-snapshot1

2.3.4 將導(dǎo)出的快照文件復(fù)制到CDP7.1.6集群
hadoop?distcp?hdfs://cdp02:8020/tmp/hbasebackup/snapshot2-snapshot1/.hbase-snapshot/TestTable-snapshot2?hdfs://cdh3.macro.com:8020/hbase/.hbase-snapshot
hadoop?distcp?hdfs://cdp02:8020/tmp/hbasebackup/snapshot2-snapshot1/archive/data/default/TestTable?hdfs://cdh3.macro.com:8020/hbase/archive/data/default


導(dǎo)入增量數(shù)據(jù)后數(shù)據(jù)目錄
hdfs?dfs?-du?-h?hdfs://cdh3.macro.com:8020/hbase/

2.3.5 命令行使用快照恢復(fù)TestTable表數(shù)據(jù)并校驗(yàn)數(shù)據(jù)
disable?'TestTable'
list_snapshots
restore_snapshot?'TestTable-snapshot2'
enable?'TestTable'
get?'TestTable','00000000000000000000000000'
count?'TestTable'


HBase的Snapshot僅涉及metadata的記錄,不會(huì)涉及數(shù)據(jù)的拷貝
HBase的ExportSnapshot導(dǎo)出快照操作時(shí)在HDFS層級(jí)進(jìn)行的,不會(huì)對(duì)HBase的Master和RegionServer服務(wù)造成額外的負(fù)擔(dān)。
重寫的ExportSnapshot增量快照導(dǎo)出是通過(guò)兩個(gè)快照文件列表的差異實(shí)現(xiàn),只需要將有差異的文件導(dǎo)出即可。
使用ExportSnapshot導(dǎo)出快照數(shù)據(jù)時(shí)未造成導(dǎo)出數(shù)據(jù)膨脹,與原始啟用了Snappy壓縮的HBase表大小基本一致。
在修改HBase自帶的ExportSnapshot,需要根據(jù)對(duì)應(yīng)的HBase版本獲取源碼進(jìn)行修改,不同版本的ExportSnapshot的Packages路徑有改動(dòng)。
在跨集群傳輸SnapShot文件時(shí)推薦使用Cloudera企業(yè)版功能BDR,實(shí)現(xiàn)跨集群的文件拷貝傳輸。
