浅谈Hbase
- 什么是HBase数据库?
- HBase是分布式、面向列(列族)的开源数据库;
- HDFS为HBase提供可靠的底层数据存储服务;
- Zookeeper为HBase提供稳定服务和Failover机制;
- HBase是一个通过大量廉价机器解决海量数据的高速存储和读取的分布式数据库解决方案。
- HBase数据库有什么特点?
- 海量存储
-
- 列式存储
-
- 极易扩展
-
- 高并发
-
- 稀疏
- 数据是怎么存的
- 逻辑存储结构
文章图片
-
-
- Column Family又叫列族,Hbase通过列族划分数据的存储,列族下面可以包含任意多的列,实现灵活的数据存取。Hbase表的创建的时候就必须指定列族。Hbase的列族不是越多越好,官方推荐的是列族最好小于或者等于3。
- Column 为列属于某一个列簇,在 HBase 中可以进行动态的添加。
- Row Key 表的主键,按照字典序排序。
- Cell 指具体的值。
- Version在这张图里面没有显示出来,这个是指版本号,用时间戳(TimeStamp)来表示。
- Hbase是一个kv数据库,怎么根据Key来获取Value呢?
-
文章图片
Key是由 Column Family、Column和TimeStamp来组成的。TimeStamp 在 HBase 中充当的作用就是版本号,因为在 HBase 中有着数据多版本的特性,所以同一个 Key可以有多个版本的 Value 值(可以通过配置来设置多少个版本)。
-
- HBase的物理存储结构
文章图片
从图中可以看出Hbase是由Client、Zookeeper、HMaster、HRegionServer、HRegion、HStore、HDFS等几个部分组成,下面来介绍一下几个部分的相关功能:
-
- Client
-
- Zookeeper
Hbase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。
具体工作如下:
-
- 通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务;
- 通过Zoopkeeper来注册HRegionserver和HRegion;
- 通过Zoopkeeper存储元数据的统一入口地址等。
-
- Hmaster
-
- 协调多个RegionServer,监测各个RegionServer之间的状态,并平衡RegionServer之间的负载;
- 为RegionServer分配Region;
- 发现失效的Region,并将失效的Region分配到正常的RegionServer上;
- HDFS上的垃圾文件回收;
- 处理Schema更新请求等。
-
- HRegionServer
-
- 维护Hmaster为其分配的Region;
- 处理HRegion的IO请求,负责与底层HDFS的交互;
- 负责切分正在运行过程中变得超过阈值的Hregion;
文章图片
-
- HRegion
一个Table可以有多个HRegion,HBase使用rowKey将表水平切割成多个HRegion,每个HRegion都纪录了它的StartKey和EndKey,由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。HRegion由HMaster分配到相应的HRegionServer中,然后由HRegionServer负责HRegion的启动和管理,和Client的通信,负责数据的读(使用HDFS)。
HRegion是Hbase中分布式存储和负载均衡的最小单元,HRegion是按大小分割的,随着数据增多,HRegion不断增大,当增打到一个阈值的时候,HRegion就会分割为两个新的HRegion.
文章图片
-
- HStore
-
- MemStore
-
- StoreFile
-
- WAL(HLog)
-
- HDFS
- HBase读取数据的过程
- Client访问zookeeper,获取元数据存储所在的HRegionServer 。
- 通过刚刚获取的地址访问对应的HRegionServer ,拿到对应的表存储所在的HRegionServer;
- 去表所在的HRegionServer进行数据的读取;
- 查找对应的HRegion,在HRegion中寻找列族,先从MemStore中读取,如果找不到去BlockCache中寻找,再找不到就进行StoreFile的遍历;
- 找到数据之后会先缓存到BlockCache中,再将结果返回。
- HBase写入数据的过程
- Client访问Zookeeper,获取元数据存储所在的HRegionServer;
- 通过刚刚获取的地址访问对应的HRegionServer ,拿到对应的表存储所在的HRegionServer ;
- 去表所在的HRegionServer进行数据的添加;
- 查找对应的HRegion,在HRegion中寻找列族,在WAL中备份完数据后向MemStore中写入数据;
- 当MemStore写入的值超过阈值,触发溢写操作(flush),进行文件的溢写,成为一个StoreFile ;
- 随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile;
- 当StoreFile中的数据逐渐变大之后,达到某一个阈值,会进行裂变(一个HRegion等分为两个HRegion,并分配到不同的HRegionServer),原本的HRegion会下线,新Split出来的两个HRegion会被HMaster分配到相应的HRegionServer上,使得原先1个HRegion的压力得以分流到2个HRegion上。
转载于:https://www.cnblogs.com/mohanchen/p/11093146.html
推荐阅读
- 为什么你的路演总会超时()
- 财商智慧课(六)
- 异地恋中,逐渐适应一个人到底意味着什么()
- 做一件事情的基本原理是什么()
- 今天写一些什么
- 眉头开了
- 吃了早餐,反而容易饿(为什么?)
- 我们应该和什么样的人交朋友
- 做个俗物有什么不好
- 为什么越花钱的人越有钱,越舍不得花钱的人却越穷()