首页 > 代码库 > HBASE
HBASE
一、HBase相关概念
HFile是HBase专用的HDFS文件格式。域服务器中的HFile实现负责从HDFS读取HFile,以及将HFile写入到HDFS。
分布式的HBase实例依赖于处在运行状态的Zookeeper集群。
默认情况下,HBase管理一个Zookeeper集群(HBase将Zookeeper进程的启动和停止作为启动/停止自身进程的一部分。)
由于HBase主控节点可能会被重新分配,因此客户端启动时会向Zookeeper查询HBase主控节点和-Root-表的当前位置。
HBase使用一种自动分片和分发方案来应对大量数据。(与HDFS基于块的设计和快速数据访问相比)
HBase数据的所有组件--键、列族名和更名--均被其当成求解析的字节数组。这意味着所有内部值的比较及排序,均以字典顺序进行。
HBase使用列族进行基于访问模式的数据分割。定义了保存和访问HBase数据的方式。每个列族都保存在一个单独的HFILE中。
建议为每种数据访问类型创建一个列族(即应该把通常一起读/写的数据放入相同的列族)。
在表创建过程中会定义一系列列族(可以修改)。不同的列族也可以使用不同的压缩机制。
HBase中可以设置多个列族,每个列族可以有多个qualifier,相当于不同的列。
每个列与键的对应值的更新,就是新版本的写入。默认情况下,HBase为给定列的值保存最近3个版本(自动删除更老的版本)。版本深度可以在建表时设定,版本的默认实现是数据插入的时间戳,但可以设定其它方式。
Delete删除,HBase不会就地修改数据,而是创建墓碑标识来完,在主要合并的时,这些值才被清理掉
处理数据时,可以为Get和Scan配置过滤器
HBase使用HDFS作为持久化机制,因此它从不覆盖数据(HDFS不支持更新),所以每次memstore写入磁盘时,它并不覆盖已有的存储文件,而是创建新文件。为避免存储文件过多,HBase实现了一个称为合并的处理过程。
次要合并:收集多个较小的相邻存储文件并将它们重写为一个。次要合并不会删除已执行Delete操作或已经过期的数据单元,只有主要合并才会。
主要合并:主要合并运行之后,每个存储上将只有一个存储文件,通常会提升性能。合并不会实现域合并。
HBase使用了布隆过滤器,允许进行行或行/列级别的检查,这种过滤在键较稀疏时很有用,布隆过滤器在文件持久化时生成,并保存在每个文件的尾部。
二、HBase结构设计
1、一般性原则,将每个表的列族数限定为不超过10-15(HBase将每个列族保存在独立文件中,因此大量的列族会导致需要读取和合并多个文件)
列族名会显式地与每个列名保存在一起(eg:info:name),因此应该最小化列族的大小。如果列中数据量小的话,通常推荐用单个字母名字,不然列族名就占了很大的空间了,损失了有效空间利用率。
HBASE