赞
踩
HBase是一种建立在Hadoop文件系统(利用HDFS)上的分布式面向列的数据库,是Hadoop生态系统中的一员。
首先,大数据最常用的是Hadoop,它使用分布式文件系统(HDFS)存储大数据,并且通过自己的计算引擎(MapReduce)来处理数据,而MapReduce是函数式编程模型,它适用于处理各种庞大的数据。
而这种函数式编程的缺陷在于即使是最简单的搜索,它也会搜索整个数据集,所以为了解决这个缺陷,需要一个能实现快速随机单点访问的存取数据库。
它的出现是为了解决上述问题,所以它最主要的功能就是随机实时读写。
HBase是一个数据模型,我们可以通过HBase直接对HDFS的数据实现存取。
HDFS | Hbase |
---|---|
HDFS是Hadoop的底层的存储大容量文件的分布式文件存储系统 | HBase是建立在HDFS上的数据库 |
HDFS适合处理庞大的数据集而不能快速单独查找 | HBase提供在较大的表中快速查找 |
高延迟批量处理,没有批处理概念 | 数十亿条记录中可以低延迟访问单个记录 |
只能顺序访问 | HBase内部使用哈希表以及存储索引,它可以将在HDFS文件中的数据快速访问。 |
HBase的一个重要概念就是面向列,也就是说我们在定义时只能定义列族,也就是键值对,用一张表来说明其中具体的概念。
一张具体的数据表可以直观的标示列和列族的关系。
这里时间戳没有列出来,因为它是和单元格绑定的,由系统去决定(类似于Mysq的版本号),一个单元格会被修改而拥有不同的版本,版本就由时间戳去标识。
也正因为时间戳这个概念,HBase的插入(Input)也是更新(Update),我们对一个单元格去插入新的数据,这时候单元格中最新的记录就是这条新数据,由时间戳标识,我们查询查到的也是这条记录,一般来说HBase对于一个Cell会存储三个版本的数据,超过三个会删除最早的,如果插入的时候有相应列的数据为空,则按照稀疏的特点它就是空而不是上一条数据的值。
另外,我们说HBase是键值对的形式存在的,这里的键并不是行键,而是由行键+列族:列+TimeStamp共同组成一个key,而value就是相应的列的数据。
Key | Value |
---|---|
RowKey+CF:Col+Version | value |
HBase的通过对rowkey的排序分区等操作对数据进行管理。
当HRegionServer存取一个子表时,会创建一个HRegion对象,然后表的每个列族(ColumnFamily)创建一个Store实例,一个Store由多个StoreFile与之对应,每个StoreFile会对应一个HFile,HFile就是实际的存储文件,HFile就存储在HDFS的DataNode上,每个Store还会有一个memStor,它是用于写缓存的,存储在内存中。
这里HBase存在HDFS上主要的是HFile,另外还有一种HLogFile,它实际上就是WAL(Write Ahead Log)文件,用来存储未写入永久性存储区中的新数据,下面是HFile的文件结构。
HFile是HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,StoreFile就是对HFile做了轻量级包装,实际上底层就是HFile。
HBase中有一个特殊的表格起到目录作用,称为META table,META table中保存集群region的地址信息。ZooKeeper中会保存META table的位置。
当用户第一次向HBase进行读写操作时
当再次读写时,会先查找缓存,如果没有则执行上述流程。
当客户与RegionServer通信时,上文提到过,RegionServer会创建一个Region实例,在RegionServer中,多个Region之上有一个共同的BlockCache,这是一个读缓存,它将经常被读的数据存储在内存中提高读取数据的效率,如果它被占满,则读取频率低的数据会被杀出。
如果BlockCache中没有相应的数据,就去相应的StoreFile中读取Block的数据,如果还没有就把这个Block的数据写入Cache中,接着找下一块直到找到,如果整个Region都没有就返回null,其中Block使用LRU算法管理它的内存。
其他一些需要注意的点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。