Hbase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类:
从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,Hbase层有三类。下面分别介绍一下。
1、DistCp介绍
DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。
2、使用说明
最常用的使用distcp进行集群间拷贝的命令是:
在这里我们就不过多的介绍了
1、copyTable方式
copyTable也是属于Hbase数据迁移的工具之一,以表级别进行数据迁移。copyTable的本质也是利用MapReduce进行同步的,与DistCp不同的时,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成影响。 来看下copyTable的一些使用参数:
2、Export/import方式
此方式与CopyTable类似,主要是将Hbase表数据转换成Sequence File并dump到HDFS,也涉及Scan表数据,与CopyTable相比,还多支持不同版本数据的拷贝,同时它拷贝时不是将Hbase数据直接Put到目标集群表,而是先转换成文件,把文件同步到目标集群后再通过import到线上表。
3、Snapshot方式
今天我们的重点主要介绍一下使用快照的方式,快照就是一份元信息的合集,允许管理员恢复到表的先前状态,快照不是表的复制而是一个文件名称列表,因不拷贝实际的数据,所以整个过程是比较快的,相当于对表当前元数据状态作一个克隆,snapshot的流程主要有三个步骤:
加锁: 加锁对象是regionserver的memstore,目的是禁止在创建snapshot过程中对数据进行insert,update,delete操作
刷盘:刷盘是针对当前还在memstore中的数据刷到HDFS上,保证快照数据相对完整,此步也不是强制的,如果不刷会,快照中数据有不一致风险
创建指针: snapshot过程不拷贝数据,但会创建对HDFS文件的指针,snapshot中存储的就是这些指标元数据
接下来我们具体来了解一下实施方案:
1.在新集群上建立表结构一样的表
2.使用hbase shell 在老集群中创建一个快照
这里'myTable'是hbase的table名, 'myTableSnapshot'是快照的名字
创建好后可以使用list_snapshots确认是否成功
3.导出快照到目标集群
在源集群中导出快照到目标集群
这里ip、port是目标集群的ip和port, 导出快照是系统级别会启动一个mapreduce的任务,可以在后面增加-mappers 16 -bandwidth 200来指定mapper和带宽, 这里200指的指200 MB/sec.
4. 快照还原到目标集群的目标hdfs
在目标集群中执行
5.在目标集群从hdfs恢复相应的hbase表及数据
在目标集群执行
背景
Hbase是在支撑环境部署的,而emr-hbase是vpc环境部署的,所以hbase->emr-hbase的服务不能直接访问,emr-hbase->hbase的网络可以通过vip来访问。所以在迁数据的时候是拉数据,而非hbase推数据。
1.在源Hbase集群创建测试表
2.插入测试数据
3.源集群创建并导出快照
查看当前已有快照: