BDS - HBase数据迁移同步方案的设计与实践

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 目前在阿里云上,BDS是如何进行HBase集群之间的数据迁移和数据的实时同步的

HBase用户福利

新用户9.9元即可使用6个月云数据库HBase,更有低至1元包年的入门规格供广大HBase爱好者学习研究,更多内容请参考链接

概览

BDS针对开源HBase目前存在的同步迁移痛点,自主研发的一套数据迁移的平台。有关于BDS的基本介绍,可以查看《BDS-HBase数据迁移同步的利器》。本文主要介绍目前在阿里云上,BDS是如何进行HBase集群之间的数据迁移和数据的实时同步的。

架构

1559705835293_e80a7351_14bb_4338_92a2_f58234657b70

  • BDS采用分布式的架构,由BDSMaster节点生成、调度任务给各个BDSWorker节点
  • BDSWorker节点负责具体的任务执行,是无状态的,方便扩容、升级
  • Reader 和 Writer 插件化,支持跨版本,异构数据源的迁移和实时数据同步

历史数据迁移方案

对于历史存量数据的迁移,我们是通过拷贝文件的方式,将数据文件拷贝到目标集群,然后统一对文件进行Bulkload,将数据装载到目标表中
1559720655989_e5a94510_e88d_42c3_9718_814bc391e478

迁移流程:
  1. 客户提交历史数据迁移的任务
  2. BDSMaster获取原表的Region分区情况,针对每一个Region分区生成一个Task,平均下发给各个BDSWorker节点
  3. BDSWorker节点接收到Task任务之后,会迁移指定Region分区下的HFile文件,HFile的拷贝走的是字节流的拷贝,并且能够自动处理Region的Split、Merge、Compaction等操作导致HFile文件的变化,保证文件迁移过程中的不丢失
  4. BDSMaster在迁移过程中会对各个BDSWorker上执行的任务进度、详情进行监控,对于超时的任务,异常任务进行重试
  5. 所有的任务都迁移完成之后,BDSMaster会通知目标集群进行数据的装载,将数据装载到目标表中

BDSWorker 宕机的处理

BDSMaster通过ZK监听各个BDSWorker的状态,当某个BDSWorker宕机,BDSMaster会将宕机BDSWorker上正在执行的Task,重新下发给其他的BDSWorker,其他BDSWorker接收到重试的Task,会从中断的地方开始重试,防止重复迁移已经迁移完成的数据

对Region的Split、Merge、Compaction的处理

Region的Split、Merge、Compction会导致HFile文件在迁移的过程中不断的发生的变化

  • 某个文件在迁移的时候被Compaction合并了,文件就不存在了
  • 某个Region在迁移的时候发生了split,Region不存在了
  • 迁移的时候HFile是个引用文件,不包含实际的数据,只是对源文件的引用

针对HFile文件是个引用文件、HFile文件被合并了,BDSWorker会自动处理,保证数据的不丢失,针对Region的Split、Merge,BDSMaster会感知原表的变化,获取新生成的Region生成新Task,下发给BDSWorker去执行

Bulkload优化

1559724900827_cf702c27_a9c3_4e81_adfa_1fb0b53be023

数据文件拷贝完成,在对数据进行装载的时候需要对HFile排序、切分和分组,当原表和目标表的分区很不一致,就会导致大量的HFile被切分,从而影响bulkload的速度。
因此,我们在拷贝文件的时候BDS会自动对要分区的文件进行拆分,在Bulkload的时候就可以直接load各个HFile文件到对应的Region分区中。

数据本地化率的优化

1559725574141_f8fcd0f9_92e5_4078_8438_181a16f0409c

数据迁移完,RegionServer在读取文件数据的时候,可能存在大量的远程读(数据不落在本地的DN上,需要访问远端的DN),会导致读RT变高。
BDS在迁移文件的时候,会尽可能的将数据写到对应RegionServer所在的DN上。

BDS vs 开源方案

  1. 在迁移过程中,几乎不会和集群的HBase交互,只和集群的HDFS进行交互,尽可能的避免了对在线业务的影响
  2. 文件的迁移走的是文件字节流的拷贝,因此比通常API层的数据迁移通常能节省50%以上的流量
  3. 迁移不需要修改源集群目标的配置,也不需要在集群上做什么操作,不占用HBase集群的存储、计算、内存等资源
  4. 数据迁移考虑本地化率,可以保证迁移完之后目标集群有更好的读rt
  5. 迁移的文件根据目标表的分区情况自动拆分,大大提高了大表数据装载的速度
  6. 有完善的failover机制,支持异常任务重试,断点续传
  7. BDSWorker无状态,升级、扩容非常容易,便于运维
  8. 支持配置的热更新,可以设置每个BDSWorker启动的线程数以及每个线程迁移的速度

实时数据同步方案

1559793372014_29574652_3733_4fe3_ad8b_aaffb7214b87

  1. BDSMaster会不停扫描源集群HDFS上的日志
  2. 针对新生成的log会生成对应的Task,下发给各个BDSWorker
  3. BDSWorker针对每个Task,会创建TaskTunnel,TaskTunnel 包含 Reader、Queue、Writer,Reader 负责读取 log并将读取的log数据丢到queue中,writer异步消费queue中的数据发往目标集群

支持跨版本、异构数据源的实时数据同步

1559727336781_6e81bd92_03c2_4efb_882c_5e3e0d65c1bd

TaskTunnel中的Reader和Writer我们采用的是插件化的方式,针对不同的源端和目标端,我们使用对应版本的Reader和Writer,BDS不仅支持跨版本HBase的同步,甚至支持异构数据源的数据同步

抗热点

1559728376271_4a5807fc_d29d_4e8f_9700_60498fdea63f

对于原生的HBase Replication来说,写热点的RegionServer会生成更多的日志,同步压力也会更大,往往会导致这台RegionServer的数据同步不过来。遇到热点的问题,你可以用一些运维的方式去解决。比如从热点服务器移走Region,降低吞吐与负载,但热点并不保证是恒定的,可能会跳跃在各个服务器。

1559729055208_b98ac6dc_d58b_4307_817c_e48485fbb165

对于BDS,由BDSMaster统一获取源集群的日志,然后平均分配给各个BDSWorker,因此每个BDSWorker处理的日志数量基本是相同的。即使源集群RegionServer存在写热点,但热点RegionServer的日志也能被平摊到各个BDSWorker去执行,从而避免因热点导致的同步延迟。

同步积压

HBase Replication

1559735922544_541c571e_a959_4b6c_bcbe_c6194a08faf1

对于HBase Replication来说,同步逻辑是集成在RegionServer中的,因此数据的同步和RegionServer本身的读写相互影响,又因为HBase服务于客户端的线程数,要远远大于Replication的线程数。面对高负载的写场景数据复制基本很难消化庞大的写吞吐,就会导致同步积压。面对数据的同步积压,通过开大线程数量不一定能解决问题,因为RegionServer此时的负载可能已经很高了。也不太容易通过横向扩展节点来解决同步积压的问题,因为扩展节点我需要扩展RegionServer节点以及DataNode节点,只能在业务低峰期的时候慢慢的消费。

BDS

1559736850960_a13055b3_b1d4_46bb_8f04_32d5aad4abf2

对于BDS来说,BDS采用读写异步的方式,可以通过以下几种方式来解决同步积压的问题

  • 增加BDSWorker节点,来提高整个迁移服务的吞吐
  • 动态配置每个BDSWorker处理日志的线程数,来提升单个节点日志处理的并发度
  • 动态配置每个TaskTunnel的Writer数量,从而提升单个日志的处理吞吐

同步监控

1559737406379_90d54d3d_db1c_40c2_831e_2a796bbaebdf

对于同步的监控,我们定义

同步延迟 = 数据被同步到目标集群的时间t2 - 数据被写入到源集群的时间t1
        ≈ 读延迟 + 读耗时 + 在队列等待耗时 + 写耗时

读延迟:表示数据被写入HDFS上的HLog到我们从读取的HDFS上读到这条数据的时间间隔
读耗时:从文件中读取一批数据的耗时
队列等待时间:数据被读出来添加到队列中的等待时间
写耗时:数据被写入到目标集群的耗时

我们需要监控这几项指标,就能比较方便的定位同步过程中的问题
当写耗时增大,我们可以定位目标集群可能存在了一些问题或者网络存在问题
当队列等待的耗时较大,说明写入速度赶不上读取的速度,我们可以通过适当增加写线程数量,来提高写速度
读耗时变大,我们就能定位读取HLog存在一些问题,可能是网络延迟变大
读延迟不断变大,我们就可以定位BDS同步吞吐不够,同步不过来了,需要添加节点,调整同步并发

BDS vs HBase Replication

  • 功能性

    • 支持跨版本的同步
    • 支持双向同步、环状同步
  • 稳定性

    • 抗热点,同步的任务平均分配到各个BDSWorker节点
    • 对业务影响更小

      • 独立于HBase,不受RegionServer读写影响
      • 同步过程基本不会访问源HBase集群,只读取源HDFS上的日志
      • 可以控制同步的线程数和节点的并发数
    • 更加完善的failover机制
  • 易运维

    • BDSWorker stateless,便于扩展、系统升级
    • 完善的监控、报警机制

      • 监控同步时延,上下游流量,读写耗时等指标
      • 任务失败,延迟过大报警
  • 性能

    • 可以通过扩展节点数量来提升迁移同步的速度
    • 支持动态配置线程数
    • 读写异步

总结

BDS已经在阿里云上线了,方便云上的客户在自建HBase、EMR HBase、Apsara HBase集群之间的无缝迁移,集群的升配,主备容灾,能够支持PB级别数据量的集群搬站。
云上有迁移需求的客户,可以查看《BDS服务介绍》,或者联系侧田

HBase技术交流

欢迎加群进一步交流沟通:
image.png
image.png

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
机器学习/深度学习 分布式计算 Hadoop
一种HBase表数据迁移方法的优化
一种HBase表数据迁移方法的优化
91 0
|
6月前
|
SQL 关系型数据库 MySQL
Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
【2月更文挑战第9天】Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
260 7
|
5月前
|
Oracle 关系型数据库 数据处理
实时计算 Flink版产品使用问题之如何进行Oracle到HBase的同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
存储 大数据 分布式数据库
使用Apache HBase进行大数据存储:技术解析与实践
【6月更文挑战第7天】Apache HBase,一个基于HDFS的列式存储NoSQL数据库,提供高可靠、高性能的大数据存储。其特点是列式存储、可扩展至PB级数据、低延迟读写及多版本控制。适用场景包括大规模数据存储、实时分析、日志存储和推荐系统。实践包括集群环境搭建、数据模型设计、导入、查询及性能优化。HBase在大数据存储领域扮演关键角色,未来有望在更多领域发挥作用。
|
6月前
|
存储 Java 分布式数据库
【分布式计算框架】HBase数据库编程实践
【分布式计算框架】HBase数据库编程实践
106 1
|
6月前
|
存储 缓存 分布式数据库
HBase的数据迁移是如何进行的?
HBase的数据迁移是如何进行的?
62 0
|
资源调度 Java Linux
Hbase实践将所有info列簇下的name列导入到另一张表中
Hbase实践将所有info列簇下的name列导入到另一张表中
|
存储 SQL 消息中间件
Kylin 在贝壳的性能挑战和 HBase 优化实践(2)
Kylin 在贝壳的性能挑战和 HBase 优化实践
133 0
Kylin 在贝壳的性能挑战和 HBase 优化实践(2)
|
SQL 分布式计算 监控
Kylin 在贝壳的性能挑战和 HBase 优化实践(1)
Kylin 在贝壳的性能挑战和 HBase 优化实践
127 0
Kylin 在贝壳的性能挑战和 HBase 优化实践(1)
|
存储 搜索推荐 Java
如何基于 HBase 构建图片、视频数据的统一存储检索方案|学习笔记
快速学习如何基于 HBase 构建图片、视频数据的统一存储检索方案
如何基于 HBase 构建图片、视频数据的统一存储检索方案|学习笔记