数据库有很多种,有行式存储的MySQL数据库,也为关系型数据库,是一个具有关联型数据库,各表之间能够连表查询,但是不能支持大数据量的查询与存储,所以就出现了能够存储大数据的非关系型数据库hbase。
2,hbase介绍:hbase(Hadoop Database):从他的全名可以看出他是一个分布式数据库,也是一个列式型数据库,由于是分布式和以列式存储所以不支持join查询,也就是连表查询。
1,habse的内部组件有一个hmaster,一个zookeeper集群,一个datanode有一个HRegionServer负责管理region这个切片,我们可以把理解为,比如有一张非常大的表,假设有100G的表格数据,在hbase集群上负责管理HRegionServer的老大Hmaster就会把这个100G的表格数据进行切分,(相比学过hadoop的同学应该很熟悉),如果有三个子节点,可以根据hbase的切片策略分成三份,每台节点33G,交给HRegionServer管理,Hmaster分好后,就会交给HRegionServer管理每个分片,以及最后的storefile的合并和HDFS交互最后阶段。HRegionServer 中可以有不同的region,(当有一台HRegionServer宕机时,为了恢复宕机里面的数据时会把Hlog进行拆分,然后分发到正常的HRegionServer中去)。
3,hbase核心知识点:1,hbase的分片是根据RowKey进行水平切分的,一个region是一个范围数据(假如:1~1001),所以一个HRegionServer能够存储不同的Region,看到这里我相信你一定焕然大悟,所以在我看来,Region分片同样也是来自不同RegionServer宕机后所分发过来的Region,所以一个HRegionServer可以管理着不同的Region。
2,hbase的第二核心点为:Region中的真实和hdfs交互数据,我们一起往下细分,hbase为了保护数据的丢失,在Region中的store中设置了一个memstore内存存储数据的执行操作,也可以说为日志是用来恢复数据用的,这一点比较重要,也是关键组件,在这里面存在一个storefile文件,(重要说一下,一个store为一个列簇,大约可以存三个列簇最好),storefile中的真实的物理数据为hfile用store file做一个封装(可想而知一个store为一个列簇,那么一个storefile是什么就很简单了,可以认为他是一个列簇中的一个列存储的数据,多个storefile组成一个列簇,而hfile就为一个列里面存储的数据,也就是真实数据/物理数据)。