HBase数据保存在HDFS中,包含HBase的库表数据和Region等元数据。因为数据量比较大,如果要考虑到无缝切换或者延时低,还需要把整个迁移分成离线全量迁移和实时增量同步。
1.HBase离线全量迁移
有以下可选方案。
1.1.方案一:distcp+bulkload
HBase的数据都存在HFile中,HFile存放在HDFS中,通过distcp工具将源集群的HFile文件拷贝到目标集群。然后,在目标集群通过HBase的bulkload工具将HFile批量加载到HBase中。
整个过程都是通过HDFS和HBase的客户端工具来完成,是原生能力,不需要停服务。
方案优点:使用原生功能,可靠性高。对HBase完整库表进行拷贝,迁移效率高。
方案缺点:无法选择性迁移某些库表。
1.2.方案二:copytable
通过MapReduce任务去读源集群HBase表的数据,然后写入到目标集群HBase表。
方案优点:迁移效率高,操作简单,适用于小规模HBase迁移。
方案缺点:不支持迁移部分库表或者列簇。消耗源集群的计算资源,负载增加。
1.3.方案三:snapshot
Snapshot是HBase的原生能力,表示某个时刻整个HBase的镜像。要实现Snapshot,需要加锁拷贝元数据。
方案优点:迁移过程不会对源集群产生影响,数据一致性高。
方案缺点:需要在源集群创建snapshot,有一定的时间成本,适用于小规模的HBase迁移。snapshop仅支持0.94版本以上,不支持源端和目的端集群同时对外提供服务。
1.4.方案四:Export/Import
将源集群的HBase表导出为Sequence File,同步到目标端集群,并在目标端集群导入到HBase表。
方案优点:可以迁移部分库表或列簇,灵活性非常高。
方案缺点:迁移速度较慢,需要手动进行导出和导入。
2.HBase实时增量同步
HBase实时增量同步主要通过Replication机制来实现。
将目的端RegionServer作为源端集群的一个备份,进行实时同步。
源端HBase客户端完成put请求后,RegionServer有后台线程不断推送HLog到目标端集群。