HBASE

Posted 鎏鑫岁月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

HBaseHBase集群Shell操作

Hbasehbase和phoenix的整合

HbaseHbase 一些面试题

HBaseHBase的RK设计避免热点

hbasehbase配置独立的zookeeper的安装与测试

大数据技术之HBaseHBase简介HBase快速入门HBase进阶