写在前面:我是「且听风吟」,目前是某上市游戏公司的大数据开发工程师,热爱大数据开源技术,喜欢分享自己的所学所悟,现阶段正在从头梳理大数据体系的知识,以后将会把时间重点放在Spark和Flink上面。
如果你也对大数据感兴趣,希望在这个行业一展拳脚。欢迎关注我,我们一起努力,一起学习。博客地址:https://ropledata.blog.csdn.net
博客的名字来源于:且听风吟,静待花开。也符合我对技术的看法,想要真正掌握一门技术就需要厚积薄发的毅力,同时保持乐观的心态。
你只管努力,剩下的交给时间!
文章目录
一、前言
本文HBase版本:2.1.3
HBase是大数据从业者必知必会的技能,我们需要掌握HBase的原理,架构设计,存储设计,优点及适用场景等方方面面。由于它的logo是一个海豚的形象,因此本文深入到HBase的起源开始分析,从0开始带你畅游大数据的海豚湾!
二、HBase起源
了解一个技术之前,我们要知道它是怎么来的,解决了什么问题,然后才会根据咱们自己的业务需要来考虑技术选型。
HBase最早起源于Google公司于2006年发表的BigTable论文,而后经过迅速的发展壮大,在2010年的时候成为了Apache的顶级项目。后来很多大公司都对HBase进行了符合自己业务风格的二次开发,就像flume一样,大部分我们也都能使用。
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式开源数据库,也就是NoSQL数据库,注意这里的NoSQL是指not only sql的意思。其实在我看来,HBase不能完全称得上分布式数据库,它其实更像是分布式存储系统,有点像HDFS。因为它没有大多数数据库所具有的RDBMS特性,比如没有触发器,不支持列的类型,也不支持高级查询语句。
那它这么菜,是怎么在大数据圈混的风生水起的呢?
咱们接着往下看!
三、HBase优点及适用场景
前面我们了解了HBase的起源,也吐槽了它的一些缺点,那它还这么火,肯定是有原因的。它的优点可以归纳如下:
- 高可靠,和hadoop HA一样,可以进行自动的故障转移;
- 高性能,存储数据时可以自动分片,通过Region分散在整个集群里,同时随着行数不断增长,Region也可以自动的切分和再分配;
- 强读写一致,保证了读写一致,所以适合高速的计算聚合操作;
- 最初是Hadoop的子项目,因此和HDFS高度集成,自由衔接;
- 代码写着简单,HBase提供了便捷高效的API,同时目前还有Phoenix助力,可谓如虎添翼;
- 优化了列查询,提供了块缓存和布隆过滤器,可以更高效的进行列查询。
结合这些HBase的优点,相信大家可以理解为什么我觉得HBase更像是一个分布式存储系统了吧?那它适合的业务场景也显而易见,可以概括如下:
-
海量数据存储
作为大数据的海豚湾,HBase有容乃大,它非常适合存储海量数据,比如百亿行的数据。因此在大数据体系里,可以使用HBase存储日志数据,各种组件的日志,业务操作日志等等疯狂往里塞。
-
实时列查询
前面我们介绍HBase优点的时候,已经说了HBase对于列查询做了很多优化,因此即使HBase存储着海量数据,你依然可以很快的查询到想要的RowKey对应的数据,因此在实际业务里HBase也经常应用于实时的查询场景。
看到这里更能感受到它的重要性了吧?下面我们接着分析HBase的结构设计。
四、HBase架构设计
从图中可以看出Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等几个组件组成,下面来介绍一下几个组件的相关功能:
从上面这个图里,我们可以发现HBase是由Client、Zookeeper、HMaster、HRegionServer、HDFS等几个组件组成,那么它们都有什么作用呢?可以概括如下:
- Client:其实client不仅包含了访问Hbase的接口,还维护了对应的cache来加速Hbase的访问,比如cache的.META.元数据的信息。
- Zookeeper:在大数据生态里zookeeper是很常见的,它主要作为分布式的协调。在HBase里它主要负责的工作如下:
- 保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master来提供服务;
- 监控RegionServer的状态,当RegionSevrer