1. hbase的简述
hbase作为google的大数据三篇比较重要的论文之一,它的起源叫做bigtable,意思非常简单就是大表的意思,是一个分布式存储很多数据的大型表格系统,它是对于hdfs中的数据不能直观查询和随机读写的病痛的一个补充和完善。
hdfs中的数据是整存整去的数据体,按照128M进行拆分然后分布式存储,我们之前学过这个组件,hdfs能够很好的保证数据的稳定性和读取存储的高性能,同时具有很强的可靠性,但是这个数据只能整体的存储和读取使用,如果我们存储一堆重要的文件信息,想要读取其中某一条数据,或者修改其中的一个值或者删除一行内容是完全做不到的,比如读取我们需要整体进行读取,然后过滤出来我们想要的数据,假如数据是1T大小,我们只想要一行内容也需要将1T全部读取出来然后进行过滤,这个是非常低性能的,完全不能保证在大数据场景中的实时效果,而且完全不支持修改数据,想要修改数据必须要将数据全部都读取出来然后修改整个数据然后在重新存储到hdfs中,所以hdfs中的数据更像是一个仓库,里面非常粗粒度不能保证灵活性,至此hbase出现了。
hbase并不提供数据存储,而是借助于hdfs进行数据存储,在这个基础之上实现了上层架构的一个管理和封装,它更像是一个给予内存的hdfs的管理组件,类比生活中更像是一个售卖柜台和一个商场的仓库的关系,柜台更加灵活的进行商品的售卖和购买,仓库中只是作为大量商品的存储,比较重量级和固定。
2. hbase的原理
那么hbase是怎么进行hdfs上层管理的呢???
hbase首先是hdfs上层的一个管理层,hbase自身是带有元数据信息的,用来记录我们在hbase中创建了多少个表,并且每个表存在多少个列,这样就可以实现表格级别的使用和管理,并且会将表格的数据放入到hdfs中存储,为了方便查询和管理会按照表的列进行文件的存储和分类,比如info列就会存储到一个单独的hfile文件中,但是hbase中存储的数据会非常的多,那么一个列单独保存在一个hfile中,也是难管理和查询的,所以按照行级别进行数据的分割存储到不同的文件中,这样可以非常快速的检索出来数据,但是不能够解决掉数据的修改问题,因为底层是hdfs的存储,这样是没有办法灵活修改和变化的,这个时候hbase引入了一块内存区域,会将数据的修改和插入放入到内存中,一旦缓存区中的数据满了,那么就会将数据存储到hdfs中并且对数据进行修改和合并操作,能够保证灵活的数据修改,并且通过图中我们可以发现数据是按照列为一个整体进行存储的,所以查询效率会更高,大数据场景中存储的数据会存在很多列,那么我们只需要其中的两列就可以直接去相应的hfile中读取数据,不需要全部的hfile文件都扫描读取,从而实现灵活的数据随机读写。
3. hbase的组成结构
hbase中的数据是存储到hdfs中的,但是hbase要管理hdfs中数据的元数据信息,并且对插入和修改的数据进行处理,在大数据场景中首先数据量会很大,而且表也会非常的多,那么hbase管理起来压力也会非常的大,所以hbase也是分布式的,多个机器共同分摊表数据的管理压力。
所以hbase中会存在很多个节点组件进行管理,首当其冲的就是hregionserver管理每个节点的数据,每个列的数据存储和hfile文件的管理,一般这些节点都会和hdfs的datanode节点部署到一起,hmaster主要是通过zookeeper对多个regionserver进行管理,并且管理整个集群中的元数据信息文件,为了防止hbase的Hmaster主节点的单机故障问题,使用zookeeper进行协调选举服务保证多个hmaster下的集群稳定问题。