Hbase存储实现
Posted 四海八荒第一团子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hbase存储实现相关的知识,希望对你有一定的参考价值。
1、Hbase的数据存储在存储文件(store file)中,称为Hfile。
2、Hfile中存储的是经过排序的键值映射结构。文件内部由连续的块组成,块的索引信息存储在文件的尾部。
3、打开Hfile并加载到内存中时,索引的信息会优先加载到内存中,每个块的默认大小是64kb,可根据其需求配置不同的块大小。
4、每一个Hfile都有一个块索引,通过一个磁盘查找可以实现查询。
5、Hfile通常保存在分布式文件系统(Hadoop HDFS)中,HDFS提供了一个可扩展的、持久的、冗余的Hbase存储层。
6、每次更新数据时,都会先将数据记录在提交日志中,在Hbase中叫做“预写日志”,然后才会将这些数据写入内存中的memstore中。
7、Hbase有Regionserver的内存:menmstore用于写;blockcache用于读取数据。
8、一旦内存保存的写入数据的累计大小超过一个给定的最大值,系统就会将这些数据移出内存作为Hfile文件刷写到磁盘。数据移除内存之后,系统会丢弃对应的系统日志,只保留未持久化到磁盘中的提交日志。持久化到磁盘中的Hfile是按照行键顺序排序的,所以没必要执行排序或者其他特殊处理。
9、Hfile是不可改变的,所以没有办法通过移除某个键值对来简单的删除值。但可以通过做“删除标记”(墓被标记)来表明给定的行已经被删除的事实。删除标记掩盖了实际值,用户读取不到被做了删除标记的值。
10、读回的数据是两部分数据合并的结果,一部分是memstore中还没写入到磁盘中的数据,;另一部分是磁盘上的存储文件。
11、数据检索时用不到预写日志系统(WAL)。
12、内存中的数据在服务器崩溃前没有写到磁盘,而后进行恢复数据时才会用到WAL。
13、随着越来越多的Hfile文件的产生,Hbase的机制管家会将多个小的Hfile合并成一个大的Hfile。合并有两种类型,合并类型:
minor合并(将多个小文件合并成一个大文件)
major合并(将一个region中一个列族的若干个Hfile重写为一个新的Hfile,major合并会扫描所有的键值对,顺序的重写全部的数据,重写数据的过程会忽略做了删除标记的数据)
14、Hbase三组件:
客户端库
一台主服务器
多台region服务器
可动态的增删region服务器,主服务器主要负责利用zookeeper为region服务器分配region
15、zookeeper是一个可靠的、高可用的、持久的分布式协调系统。zookeeper提供了类似文件系统一样的访问目录和文件的功能,通常分布式系统利用他协调所有权、注册服务、监听更新————每台region服务器在zookeeper中注册了一个自己的临时节点,主服务器会利用这些临时节点来发现可用服务器,还可以利用临时节点来跟踪机器故障和网络分区。在zookeeper中,每个临时节点都相当于一个会话,这个会话是客户端连接zookeeper自动生成的。且每个会话有一个唯一的id,客户端会以此id不断地向zookeeper发送请求,一旦发生故障zookeeper客户端进程死掉,zookeeper会判断该会话超时,并自动删除属于它的临时节点。
16、Hbase可利用zookeeper确保只要一个主服务器在运行,zookeeper作为一个region服务器的注册表,zookeeper是一个关键的组成部分,没有zookeeper,Hbase无法运行。
17、列式存储结构允许表在实际存储时不存储NULL值,因此表可以看作是一个无限的、稀疏的表。表中的每一行数据只由一台服务器所服务。hbase具有强一致性,多版本可以避免因并发解耦过程引起的编辑冲突,而且还可以保留这一行的历史变化。
博客(丸子_up)同步更新
以上是关于Hbase存储实现的主要内容,如果未能解决你的问题,请参考以下文章