HBase集群数据在线迁移方案探索

💡 原文中文,约12500字,阅读约需30分钟。
📝

内容提要

订单本地化系统已将一个月的订单的读写切换至jimkv存储,对应的HBase集群已下线。计划将存储全量数据的HBase集群中的数据迁移到jimkv,彻底下线该HBase集群。HBase客户端提供了Shell命令行接口、Java API编程接口、Thrift/REST API编程接口和MapReduce编程接口。HBase客户端访问数据行之前,需要通过元数据表定位目标数据所在RegionServer。Master负责HBase系统的管理工作,RegionServer用来响应用户的IO请求。HBase底层依赖HDFS组件存储实际数据。使用Snapshot功能可以进行全量/增量备份和数据迁移。

🔎

延伸解读

在线迁移的核心挑战

文章指出,待迁移的HBase集群仍在线上读写,因此迁移方案必须避免停写。Hadoop层的DistCp需要源集群停写,不可行;HBase层的copyTable和Export/Import均涉及全表扫描和深拷贝,对源集群读写性能影响大,且copyTable不保证数据一致性。相比之下,Snapshot备份不拷贝数据,速度快且能保证一致性,更适合在线迁移场景。

Snapshot迁移的实践要点

使用Snapshot迁移时,需在目标集群预先建好表结构,在源集群创建快照,通过ExportSnapshot导出到目标集群,再restore_snapshot恢复数据。文章提醒,操作需要申请zk和hbase-master节点的shell管理员权限。对于订单本地化HDD中order_info_2023表分布在1500多个region的情况,作者指出Snapshot易超时,但未给出具体解决方案,需读者进一步探索。

Scan缓存调优建议

文章建议,大scan场景下将scan缓存从默认的100增大到500或1000,以减少RPC请求次数,据《HBase原理与实践》作者试验,延迟可降低约25%。对于离线批量读取,由于数据量大且只执行一次,大量数据进入缓存会挤占实时业务的热点数据,因此建议设置scan.setCacheBlocks(false)禁用缓存,避免影响线上业务。

大数据量扫描方案对比

对于大量数据扫描,文章对比了TableScanMR和SnapshotScanMR。TableScanMR是ScanAPI的并行化,按region边界切分scan,但存在数据倾斜问题,需设置hbase.mapreduce.input.autobalance为true来平衡。SnapshotScanMR直接在客户端扫描HDFS文件,绕过RegionServer,减少网络传输,扫描效率有2倍到N倍提升,且对集群其他业务影响更小。

❓

Q&A

HBase集群的数据迁移方案有哪些?

HBase集群的数据迁移方案包括使用Snapshot、copyTable、Export/Import和DistCp等工具。

Snapshot功能在HBase中有什么优势?

Snapshot功能不需要拷贝数据,备份速度快且保证数据一致性,适用于全量和增量备份。

HBase客户端如何访问数据?

HBase客户端通过元数据表定位目标数据所在的RegionServer,然后发送请求访问数据。

HBase的Master和RegionServer分别负责什么?

Master负责管理HBase系统和RegionServer,而RegionServer主要响应用户的IO请求。

在HBase中,如何提高Scan API的性能?

可以通过设置合适的startkey和stopkey、增大scan缓存以及使用TableScanMR等方法提高Scan API的性能。

HBase中的Region是什么?

Region是数据表的分片,HBase通过水平切分管理Region,以实现负载均衡。

🏷️

标签

➡️

继续阅读