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
如导出特定规则数据,以上方式皆不能满足需求,只能手动编写任务从HBase 读写表数据。
6、总结
DistCp: 文件层的数据同步,也是我们常用的
CopyTable: 这个涉及对原表数据Scan,然后直接Put到目标表,效率较低
Export/Import: 类似CopyTable, Scan出数据放到文件,再把文件传输到目标集群做 Import
Snapshot: 比较常用 , 应用灵活,采用快照技术,效率比较高
Spark/MR任务:以上不能满足的特殊需求则用此方法
具体应用时,要结合自身表的特性,考虑数据规模、数据读写方式、实时数据&离线数据等方面,再选择使用哪种。
参考