HBase 数据迁移/备份方法

HBase 数据迁移/备份方法

1、Hadoop层 DistCp(迁移)

Hadoop层的数据迁移主要用到DistCp(Distributed Copy), 官方描述是:DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。

demo:

hadoop distcp hdfs://src-hadoop-address:9000/table_name hdfs://dst-hadoop-address:9000/table_name

使用(先把文件传到临时目录,最后再目的集群上load表):

hadoop distcp

-Dmapreduce.job.name=distcphbase

-Dyarn.resourcemanager.webapp.address=mr-master-ip:8088

-Dyarn.resourcemanager.resource-tracker.address=mr-master-dns:8093

-Dyarn.resourcemanager.scheduler.address=mr-master-dns:8091

-Dyarn.resourcemanager.address=mr-master-dns:8090

-Dmapreduce.jobhistory.done-dir=/history/done/

-Dmapreduce.jobhistory.intermediate-done-dir=/history/log/

-Dfs.defaultFS=hdfs://hbase-fs/

-Dfs.default.name=hdfs://hbase-fs/

-bandwidth 20

-m 20

hdfs://src-hadoop-address:9000/region-hdfs-path

hdfs://dst-hadoop-address:9000/tmp/region-hdfs-path

注意点:

  • 源端集群到目的端集群策略是通的

  • hadoop/hbase版本需一致


2、CopyTable

HBase数据迁移的工具之一,以表级别进行数据迁移。与DistCp不同的是,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成影响

demo:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=dst_table src_table

注意:

0.94.x版本之前是不支持snapshot


3、Export/Import方式

将HBase表数据转换成Sequence File并dump到HDFS,也涉及Scan表数据,与CopyTable相比,还多支持不同版本数据的拷贝,同时它拷贝时不是将HBase数据直接Put到目标集群表,而是先转换成文件,把文件同步到目标集群后再通过Import到线上表。

分为Export/Import两阶段:

# output_hdfs_path可以直接是目标集群的hdfs路径,也可以是原集群的HDFS路径,如果需要指定版本号,起始结束时间

hbase org.apache.hadoop.hbase.mapreduce.Export <tableName> <ouput_hdfs_path> <versions> <starttime> <endtime>

 

# 如果原数据是存在原集群HDFS,此处input_hdfs_path可以是原集群的HDFS路径,如果原数据存在目标集群HDFS,则为目标集群的HDFS路径

hbase org.apache.hadoop.hbase.mapreduce.Import <tableName> <input_hdfs_path>


4、Snapshot

snapshot的应用场景和CopyTable类似,利用快照技术效率较高。

demo:

step1、创建快照:

hbase> snapshot 'src_table', 'snapshot_src_table' #查看创建的快照,可用list_snapshots命令 hbase> list_snapshots #如果快照创建有问题,可以先删除,用delete_snapshot命令 hbase >delete_snapshot 'snapshot_src_table'

step2、数据迁移:(HDFS层的操作)

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot_src_table -copy-from hdfs://src-hbase-root-dir/hbase -copy-to hdfs://dst-hbase-root-dir/hbase -mappers 20 -bandwidth 20


5、Spark/MR 任务

如导出特定规则数据,以上方式皆不能满足需求,只能手动编写任务从HBase 读写表数据。


6、总结

DistCp: 文件层的数据同步,也是我们常用的

CopyTable: 这个涉及对原表数据Scan,然后直接Put到目标表,效率较低

Export/Import: 类似CopyTable, Scan出数据放到文件,再把文件传输到目标集群做 Import

Snapshot: 比较常用 , 应用灵活,采用快照技术,效率比较高

Spark/MR任务:以上不能满足的特殊需求则用此方法

具体应用时,要结合自身表的特性,考虑数据规模、数据读写方式、实时数据&离线数据等方面,再选择使用哪种。


参考

https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html

原文地址:https://www.cnblogs.com/GO-NO-1/p/13639361.html