HBase2.0在360的技术改进与应用实践

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
简介: 一、HBase在360的使用情况从数据来看,360目前共有27个HBase集群,其中在线集群9个,综合集群3个。整个360共有12500个HBase节点,单集群最多有2184个RegionServer。

一、HBase在360的使用情况

从数据来看,360目前共有27个HBase集群,其中在线集群9个,综合集群3个。整个360共有12500个HBase节点,单集群最多有2184个RegionServer。360 的HBase集群共有1885个Table以及719703个Region,而单表最大的Region数为74788。此外,从业务层面来看,360的HBase集群每秒钟大约需要响应3百万次请求。通过这些数据也能够说明,目前对于360而言,无论是HBase集群还是节点,数量都非常庞大,请求量也非常大。而如今,整个360背后的几大重要业务都有HBase的身影,比如360搜索、安全业务以及360金融和IoT等背后都使用了HBase存储数据来支撑业务的快速发展。

image

针对如此众多的业务场景,360根据业务特点将其分为了三类:

  • 第一类业务对响应时间比较敏感,这类一般是在线业务,所使用的方式就是实时存取数据。对于此类业务,一般而言会将其放到线集群之上,在线集群的服务器配置(CPU、内存、带宽等)都会相对更高一些。与此同时,为了保证服务质量,不会在这些集群中跑MR或Spark等计算作业。
  • 第二类业务对磁盘容量要求较高,其应用场景一般是定期批量写入大量数据,并周期性地进行离线分析或备份。这类业务会被放到离线集群上,而离线集群一般会配置大硬盘,而CPU、内存配置也会相应低一点。对于此类业务,360的HBase团队也开发了一些MR作业,以帮助业务可以方便的大批量读写、分析HBase中的数据。
  • 第三类业务属于第一类和第二类中间地带的情况,这类业务对磁盘容量和响应时间有部分要求,但并不十分敏感,比如监控、缓存溯源、报表等半在线业务。这类业务一般会放到综合集群中,综合集群的配置和在线集群相当,这个集群既可以做在线读写HBase,也可以跑离线分析作业,因此可以充分的利用硬件资源。但这样的缺点也很明显,那就是会出现资源竞争和相互影响的情况。

二、基于HBase实现的功能和改进

二级索引
为了更好地支撑业务,360在HBase0.89-Facebook版本上实现和改进了一些功能。对于HBase而言,其查询方式主要有两种,即get和scan。get查询速度快,但只可以基于RowKey进行查询,虽然可以设计组合字段的RowKey,但不灵活,使用复杂,而且容易造成数据倾斜。scan查询则会消耗大量资源,而且无法保证时效性。为了更好地实现HBase的查询,360在二级索引上做了很多工作。

目前,业界对于二级索引的实现方案大体分为两类:全局二级索引方案和局部二级索引方案,两种方案各有优劣,而360选择了局部二级索引方案。以下图的Test表为例,为CF1:C2列建立了二级索引,此时,在表的同个Region中,除了原来的数据,还会插入索引数据,只不过索引数据存储在一个特殊的INDEX Column Family中。对于索引数据的RowKey而言,以Region的StartKey开头以保证和原始数据在同一个Region中,以真实数据的RowKey结尾,以保证索引数据RowKey的唯一性。索引数据的Value,只是记录了索引RowKey不同部分的长度,以方便反序列化RowKey的各个部分。在进行写数据的时候,可能需要拼出来索引数据然后插入到表中。在读数据的时候,就可以通过StartKey、INDEX name和Value拼出来的scan查询语句将索引数据取出来,获得所需要查询数据的RowKey列表,再去列表中取出真实数据。

image

对于写方案的具体实现,简单而言就是使用了HBase自带的协处理器,因此可以实现零侵入的二级索引方案。当客户端需要Put数据的时候,协处理器可以在Put之前将二级索引的数据也加入需要传输的对象中,以保证原子性。

image

对于读方案的具体实现而言,就是需要先创建一个Scanner,再调用Next()方法来读取数据。360的方案支持类SQL写法,所以当客户端收到类SQL请求时,会先进行语法解析,如果语法没问题,则会构造一个scan对象,并请求Region Server来CreateScanner。在Region Server端,则通过协处理器来拦截,并根据请求构造出一个Scanner语法树。

image

在创建完Scanner之后,下一步就是通过next()方法读取数据。这部分也分为两步,先查询索引数据,然后反序列化出真实数据的RowKey列表,之后使用这个RowKey列表去查询真实数据的Column Family。查询出数据之后,需要检查数据是否有效,然后将数据返回给客户端。对于二级索引的读流程而言,需要先查询索引数据,再查询真实数据,因此需要查询两次。其实,对于此流程而言,也可以继续进行优化,比如把真实数据也序列化到 INDEX family的Value中,这样一来只需要查询一次索引数据即可返回给客户端。

image

跨集群备份
为了实现HBase更高的可用性和方便业务就近访问数据,360的HBase团队开发了跨集群备份功能。TransferTable是一张普通的Hbase表,在这里可以把它当做一个缓存队列,图中其左侧的LogEntryVisitor相当于一个生产者,负责向TransferTable表中写数据,它右边的TransferDaemon相当于一个消费者,负责从TransferTable中读数据并发送到备份集群。这样的生产者-消费者模型就是跨集群备份的核心逻辑。

image

总结而言,当客户端向UserTable中写数据时,LogEntryVisitor会拦截WAL Append操作,并把这条记录写到TransferTable中,这是同步的过程。为了保证写TransferTable的效率,360 HBase团队开发了类似于Balancer功能,保证每个UserTable Region所在的RegionServer至少有一个TransferRegion,写TransferTable的时候直接调用Put方法即可,避免了不必要的序列化和反序列化操作。然后,TransferDaemon线程不断从TransferTable中扫描数据,并使用多个线程并行发送到远端的备份集群中。

三、HBase2.0 应用实践
如今的HBase和前几年所谈的HBase已经差异很大了,之前的HBase可能仅仅指的是一个Key-Value型的NoSQL数据库,而现在HBase却代表着一个生态,不仅是KV,还有时空、时序、图等组件。所以对于开发组织而言,应该尽早融入生态之中,避免后续的兼容性问题和大量的迁移工作。目前,360的HBase2.0实践中主要有两种应用场景,即对象存储服务和时序服务。

image

四、问题与解决
在使用HBase2.0时,360所遇到的主要问题就是MOB特性所带来的问题,这个新特性带来了单点Compaction、MOB文件过于集中,以及文件过大不便释放空间等问题。具体的解决方案则如下图所示:

image

如今,HBase指的不再仅仅是之前所谈及的Key-Value类型的NoSQL数据库,而是代表着一整个HBase生态。作为技术人员,我们应该具备技术前瞻性,勇敢地拥抱生态,并为社区和生态做出贡献。虽然,生态可能并不够成熟,但是挑战必将与机遇并存。

相关实践学习
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
相关文章
|
7月前
|
存储 分布式计算 大数据
HBase分布式数据库关键技术与实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析了HBase的核心技术,包括数据模型、分布式架构、访问模式和一致性保证,并探讨了其实战应用,如大规模数据存储、实时数据分析及与Hadoop、Spark集成。同时,分享了面试经验,对比了HBase与其他数据库的差异,提出了应对挑战的解决方案,展望了HBase的未来趋势。通过Java API代码示例,帮助读者巩固理解。全面了解和掌握HBase,能为面试和实际工作中的大数据处理提供坚实基础。
473 3
|
7月前
|
存储 搜索推荐 关系型数据库
用户画像系列——HBase 在画像标签过期策略中的应用
用户画像系列——HBase 在画像标签过期策略中的应用
142 0
|
7月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
164 0
|
7月前
|
SQL 关系型数据库 MySQL
Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
【2月更文挑战第9天】Sqoop【付诸实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)
307 7
|
6月前
|
存储 大数据 分布式数据库
使用Apache HBase进行大数据存储:技术解析与实践
【6月更文挑战第7天】Apache HBase,一个基于HDFS的列式存储NoSQL数据库,提供高可靠、高性能的大数据存储。其特点是列式存储、可扩展至PB级数据、低延迟读写及多版本控制。适用场景包括大规模数据存储、实时分析、日志存储和推荐系统。实践包括集群环境搭建、数据模型设计、导入、查询及性能优化。HBase在大数据存储领域扮演关键角色,未来有望在更多领域发挥作用。
|
6月前
|
存储 SQL 分布式计算
技术心得记录:深入学习HBase架构原理
技术心得记录:深入学习HBase架构原理
|
6月前
|
存储 缓存 分布式计算
必知的技术知识:Hbase配置(伪分布式模式)
必知的技术知识:Hbase配置(伪分布式模式)
730 0
|
7月前
|
存储 Java 分布式数据库
【分布式计算框架】HBase数据库编程实践
【分布式计算框架】HBase数据库编程实践
126 1
|
7月前
|
存储 分布式计算 Java
大数据存储技术(3)—— HBase分布式数据库
大数据存储技术(3)—— HBase分布式数据库
1949 0
|
7月前
|
消息中间件 Java 关系型数据库
【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)
【Spring Boot+Kafka+Mysql+HBase】实现分布式优惠券后台应用系统(附源码)
313 2