Apache HBase的现状和发展

一、HBase是什么

HBase(Hadoop Database),是一个基于Google BigTable论文设计的高可靠性、高性能、可伸缩的分布式存储系统。

它有以下特征:

1.HBase仍然是采用行存储的,采用松散表的结构来获得动态列的功能;

2.原生海量数据分布式存储。在单个数据库中可以存档GB甚至上pb。在一行中也可以存储上百万列。任何大小的数据量都适合采用HBase;

3.不仅支持随机查询,还支持范围查询;

4.高吞吐,低延迟。一个集群可以有上千万个dps,平均的延迟可以做到一毫秒之内;

5.在线NOSQL数据库;

6.多版本,增量导入,多维删除。

\"\"

1.1 HBase的四大基因

1.1.1自动分区

最开始的时候,我们的数据库是单机的数据库。慢慢的我们发现单机的数据库无法承受数据和访问的爆发式增长。因此就出现了分库分表的方案。将数据库和表拆分到多个服务器上,然后利用中间件作为一个路由。这里就会遇到一个问题,随着数据的增加,中间件就会成为一个瓶颈。如果请求量爆发式增长的时候,要加载新的进去,整个物理的变化需要进行搬迁之后才能够进行使用。

而在HBase中,使用的是自动分区功能。当访问量和请求量增加的时候它可以自动的进行数据分片,以应对数据和请求的爆发式增长。

\"\"

1.1.2 LSM-Tree

LSM(Log Structured Merge)Tree,它的一个重要的功能就是随机写变成顺序写。

现在LSM模型是大数据库的标配。它主要包括如下几个特点:

1)写吞吐量高;

2)不受hdd随机写瓶颈和ssd随机写入放大干扰;

3)超强数据导入能力。

\"\"

1.1.3 存储计算分离

HBase本身不会存任何数据。数据都是存储在底层的HDFS中。存储计算分离有以下好处:负载均衡更高效、资源扩容更节省、存储优化更便捷。

\"\"

1.1.4 HBase生态

HBase有一个非常强大的朋友圈。具体见下:

\"\"

1.2 场景

HBase是几乎可以满足所有的大数据场景需求。比如说对象存储,比如说推荐系统。比如说用来存储订单,用来存储聊天记录。高性能推送的朋友圈应用的场景。针对一些其他的场景,我们可以利用HBase加上组件能力来实现这些场景的应用。比如说HBase加Linux,来实现NEWSQL的数据库。比如说HBase加上geomesa来实现时空数据的存储,滴滴就是采用这种方案来存储他们的轨迹数据。在物联网场景,可以采用HBase加openjsdb来存储海量的时序数据。

\"\"

1.3使用HBase的商业公司

基本上每一个大型的公司都在使用HBase。

\"\"

1.4 HBase特性总结

HBase,为大数据而生,有LSM树:离线导入效率巨高 、实时写入吞吐大、增量导入隔离性强;伸缩性强;TTL:数据时效性,系统自动处理、时效性的个性化设置;多版本:数据的第三维度、高效删除方式;动态列:数据发散的利器;协处理器:数据校正、高效适应个性化;异构介质多副本存储:海量与实时的性价比满足;Erasure Code:因大而生。

\"\"

二、HBase社区的发展

2.1 HBase的起源

HBase于2006年诞生于Powerset,一家从事自然语言处理和搜索的创业公司(后被微软收购)

HBase的实现基于Google发布的BigTable论文,用来解决 Hadoop中随机读写效率低下的问题。HBase最初的开发人员是MichaelStack和JimKellerman。2007年4月,HBase做为一个模块提交到Hadoop的代码库中,代码量~8000行,2010年5月HBase成为Apache的顶级项目,同年,Facebook把HBase使用在其消息平台中。

2.2 HBase项目现状

目前HBase的代码已经超过100万行,HBase仍然是最活跃的Apache项目之一,拥有76个Committer,42位PMC,共有328位Contributor,其中14位 Committer/PMC 来自中国。

\"\"

2.3 HBase目前版本

HBase目前版本众多。见下图:

\"\"

三、HBase2.0

3.1 HBase2.0版本发布历史

HBase2.0的发布是一部血泪史,因为在四年前已经有这个版本了,由于一些因素,造成了没有人管理。最后花了一年多的时间才稳定他的版本发布出来,他的Release Manger多次更换,才把他发布出来。由此,我们吸取了这次教训,我们以后会做好版本控制,把控好发布的节奏。

\"\"

3.2 新功能

3.2.1 Region Replica

Region Replica这个功能在1.2版本中已经存在,但是为什么叫做新功能呢?是因为之后修改了很多bug,在1.4版本才稳定下来,然后1.4和2.0是同时发布的。在CAP理论中,HBase一直是一个CP系统,遵循强一致的读写语义,所以Server宕机后需要一定的恢复时间,如果宕机了,客户端可以从另外的副本中去读取数据,Region Replica为数据分片Region准备了多个副本,host在不同的RegionServer上,同时,客户端也可以做到,对多个副本同时发请求,然后做到选择最快速的那个副本,提供高可用读,宕机0影响,规避抖动,毛刺,降低P999延迟;缺点是需要额外耗费CPU/Memory资源,但不会占用额外空间。

\"\"

3.2.2 读写链路Off-heap

第二个新功能是全链路Off-heap,意思就是读写链路数据端到端Off-heap,减少java GC带来的停顿,进一步降低P999延迟,提高吞吐。这个功能我们从两方面来实现的:写链路Off-heap,我们使用在RPC层使用Netty的Off-heap ByteBuffer,使用支持Off-heap的Protobuf。同时使用Off-heap的Chunk 来存储Memstore中的KeyValue。

在读链路Off-heap方面,使用Off-heap的Bucket Cache,HBase自己管理内存的,我们从Bucket Cache读取数据的时候,先要从Protobuf做一次拷贝,因为可能读取的时候,发生内存不够了,再次分配的情况。在读取对Bucket Cache进行引用计数,保证读取的时候,内存不会被回收掉,读取时不再需要先拷贝到heap,对Bucket Cache进行了一系列性能优化。

\"\"

后面这是HBase官方放着阿里巴巴在双十一对HBase优化之后的对比图,可以看到优化之后他的请求的曲线更加平稳,吞吐量增长了30%,这个案例大家可以去HBase的官方去看一下。

\"\"

3.2.3 In Memory Compaction

在HBase2.0中另外一个重磅的功能就是In Memory Compaction,以前我们知道HBase中使用的数据结构是java中原生的跳表,但是跳表依然是一个松散的结构,这样的话,虽然内存不断的在增大,但是刷到之后,会造成通过In memory的flush不会到hdfs上,反而回转到更加紧凑的CellArrayMap这个结构,同时多个CellArrayMap会在内存中做compaction,使内存的使用更加紧凑。然后通过In memory的flush和compaction,在内存中可以存储更多的数据,因此可以提高读性能,同时减少磁盘IO,减轻compaction小文件造成的写放大。这个功能社区也有介绍。

\"\"

3.2.4 小对象存储MOB

之前我们建议在HBase上不要存很大的KV值,但是MOB(Moderate Object Storage) 功能使HBase能高效地存储那些100k~10M 中等大小的对象。这使得用户可以把文档、图片对象保存到HBase系统中,用户写入的小对象flush成一个独立文件,原有的KV中的value只存这个对象的引用路径,对于存储对象文件,更少地进行compaction来减少写入放大效应。

\"\"

3.2.5 Assignment MangerV2

这是一个非常重要的模块,HBase中的状态流转,建表删表,都需要在Assignment MangerV2上进行,之前旧AM系统参与角色多,状态更新混乱,效率低,无事务保证,容易出现RIT问题。所以AM V2使用ProcedureV2来保证 Table/Region状态转换在master重启后仍然能恢复执行,然后去除了Zookeeper做为中间角色,Master/RegionServer直接交互,Region assign/unassgin速度大大提升。

\"\"

3.2.6 其他

在HBase2.0中,还有非常多的新功能,具体如下:

\"\"

3.3 兼容性和升级建议

建议如下:

\"\"

四、HBase未来规划

4.1 HBaseConAsia \u0026amp; 开发者圆桌会议

HBase众多开发者也会参加这个会议,参与讨论它的未来发展方向。

4.2 更加易用

HBase已经提供了,Java的API,但是这个案例不太友好,我们目前打算提供Native的SQL接口,能够做到轻量级的SQL支持、内置的二级索引方案、与Spark SQL更好地结合等功能。

\"\"

4.3 更高性能

在以后的版本中,不用在对HBase的性能担心了,我们在以后的版本中准备从Use CCSMap to improve HBase YGC tim、全链路异步化、基于非易失存储的WALLess方案等方面努力成为LSM模型下性能最好的Java存储引擎。

\"\"

4.4 更强扩展性和稳定性

这个方面我们以下几个方面来解决:

\"\"

五、如何成为Committer

\"\"
\"\"

作者介绍

杨文龙,阿里巴巴技术专家HBase社区Committer\u0026amp;PMC,Ali-HBase内核负责人,对分布式存储系统的设计、实践具备丰富的大规模生产的经验。

本文来自杨文龙在 DataFun 社区的演讲,由 DataFun 编辑整理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dvd刻录软件_如何在Windows 7中刻录照片和视频DVD(无需额外的软件)

dvd刻录软件Software like DVD Flick is great for burning video to DVDs, but Windows 7 actually includes built-in DVD burning software. Strangely, it’s the last time the company did so—while Windows 8 and Windows 10 can play back DVD movies, they can’t cr…

如何实现office不同语言界面切换

前面我讨论了《如何实现win7不同语言界面切换》,很巧今天又有网友问到如何实现 office的语言界面切换呢。嘿,那我们就继续来玩转界面吧。 office2007和office2010也支持轻松的进行语言界面切换,操作步骤也很简单。 Office 语言界面包 (LIP) 是…

离开互联网行业_如何使用互联网再也不会离开家

离开互联网行业Thanks to the Internet, activities like “going outside” or “being a productive member of the community” are becoming increasingly optional parts of daily life. When your inner hermit feels like putting on his vampire cape, simple tricks l…

iOS 11开发教程(十三)iOS11应用编辑界面添加视图

iOS 11开发教程(十三)iOS11应用编辑界面添加视图 在iOS中添加视图的方式有两种:一种是使用编辑界面添加视图;另一种是使用代码添加视图。以下是这两个方式的详细介绍。 1.编辑界面添加视图 使用编辑界面添加视图是一个相当简单的工…

HBase存储剖析与数据迁移

1.概述 HBase的存储结构和关系型数据库不一样,HBase面向半结构化数据进行存储。所以,对于结构化的SQL语言查询,HBase自身并没有接口支持。在大数据应用中,虽然也有SQL查询引擎可以查询HBase,比如Phoenix、Drill这类。但…

windows os x_如何立即在OS X上获取Windows样式的窗口捕捉

windows os xApple’s recent announcement that the upcoming OS X release (El Capitan or 10.11) will finally, at long last, come with the ability to snap windows to your screen edges. A feature Windows users have enjoyed since 2009. 苹果公司最近宣布即将发布的…

Install Odoo 11 on CentOS 7

2019独角兽企业重金招聘Python工程师标准>>> Odoo is the most popular all-in-one business software in the world. It offers a range of business applications including CRM, website, e-Commerce, billing, accounting, manufacturing, warehouse, project m…

创建maven项目,配置maven地址

2019独角兽企业重金招聘Python工程师标准>>> 在eclipse中,新建maven项目next第二步,选择webapp输入id及包名,完成新建给项目build path,添加1.8版本jdk和tomcat项目右键属性 project Facets,切换成web项目&…

如何在Excel中隐藏单元格,行和列

There may be times when you want to hide information in certain cells or hide entire rows or columns in an Excel worksheet. Maybe you have some extra data you reference in other cells that does not need to be visible. 有时您可能想在某些单元格中隐藏信息或在…

金三银四,跳槽为敬

不是不想跳,是如今的市场水冷,挪不开脚。 三月有“黄金”。 过去很多年,这个被誉为市场黄金期的阶段,最热闹的旗帜属于房地产,其次是人才市场。跳槽二字,充满诱惑。对每一个想要改变的人而言,…

如何在Word文档中添加页眉或页脚

Headers and footers are useful for adding things such as page numbers, dates, file names, and disclaimers to documents. Word allows you to add headers and footers with built-in, ready-made layouts or add your own custom headers and footers. 页眉和页脚对于在…

双11成交多少和我无关,但这个魔性MV真的让我笑喷!

今年天猫双11,印象最深的就是“祝你双11快乐”这句话!它让大家感觉到双11不再只是一个购物节,而是一个能引起广泛共鸣、让大家有快乐情感的真正节日。以往的传统节日,都有一个标志性的符号,正如脑海中的每年春晚&#…

ios beta 下载_如何回滚到iOS 10(如果您使用的是iOS 11 Beta)

ios beta 下载So you’ve installed the iOS 11 beta and, well, you don’t love it. No problem, because you can roll right back to iOS 10. 因此,您已经安装了iOS 11 Beta ,但是,您不喜欢它。 没问题,因为您可以直接回滚到i…

instagram发布工具_如何在不发布照片的情况下保存已编辑的Instagram照片

instagram发布工具Unfortunately, there’s no built-in method for saving your edited Instagram photos without posting them first. However, with this neat trick, you can add Instagram filters to your photos and save them locally to your phone without actually…

Verify the Developer App certificate for your account is trusted on your device.

1、报错内容 Could not launch “CH5203” Verify the Developer App certificate for your account is trusted on your device. Open Settings on 测试 and navigate to General -> Device Management, then select your Developer App certificate to trust it. 2、解决方…

HTTP2和HTTPS来不来了解一下?

一、前言 只有光头才能变强 HTTP博文回顾: PC端:HTTP就是这么简单PC端:HTTP面试题都在这里微信公众号端:HTTP就是这么简单微信公众号端:HTTP面试题都在这里本文力求简单讲清每个知识点,希望大家看完能有所收…

apple默认备份位置_如何将Apple Maps默认设置为步行路线

apple默认备份位置The default mode of transportation in Apple Maps is set to driving, but with a simple tweak, you can adjust your Apple Maps experience to default to the mode you use most. Apple Maps中的默认交通方式设置为行车,但是通过简单的调整&…

JS实现千分位

方法一:正则实现 function format (num) { var reg/\d{1,3}(?(\d{3})$)/g; return (num ).replace(reg, $&,); } 解释: 1、正则表达式 \d{1,3}(?(\d{3})$) 表示前面有1~3个数字,后面的至少由一组3个数字结尾 2、?表示正向引用&…

白色裤子为什么会沾上蓝色_什么是蓝色的,为什么它可以在Mac上运行?

白色裤子为什么会沾上蓝色You’re looking through Activity Monitor when you notice a process called blued. Should you be worried that this is running? No: it’s the process that powers Bluetooth on your Mac. 当您发现一个名为blued的进程时,您正在浏…

Linux移植之内核启动过程引导阶段分析

在Linux移植之make uImage编译过程分析中已经提到了uImage是一个压缩的包并且内含压缩程序,可以进行自解压。自解压完成之后内核代码从物理地址为0x30008000处开始运行。下面分析在进入C之前内核做的一些工作,以下是内核启动过程中打印出来的信息&#x…