HBase调研分享文档

本文详细介绍了Apache HBase,一个基于Hadoop和HDFS的分布式数据库,强调其作为NoSQL与RDBMS之间的系统,具备高可靠性、高性能、列存储等特点。内容涵盖HBase的逻辑结构、物理存储、分布式系统架构,以及在Hadoop生态中的角色。文中还讨论了HRegion、Store、HFile等核心概念,以及Master Server、Region Server和Zookeeper的角色和功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HBase调研分享文档

Ver1.0 by谢柯2015/7/20

一、HBase简介

         HBase官方定义: Apache HBase™ is the Hadoop database, a distributed,scalable, big data store

HBase是bigtable的开源山寨版本。是建立的HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它介于Nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。

与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

HBase中的表一般有这样的特点:

1)        大:一个表可以有上亿行,上百万列

2)        面向列: 面向列(族)的存储和权限控制,列(族)独立检索。

3)        稀疏: 对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

4)        可伸缩性scalability:对多个服务器负载进行均衡操作的特性。

5)        多维有序映射的键值存储。

 

HBase在Hadoop生态系统中的位置:

         HDFS为HBase提供了高可靠性的底层存储支持,MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制,还有Hive等作为数据仓库工具提供类似SQL语句的查询服务。

 

二、HBase表逻辑结构术语介绍

         HBase以表的形式存储数据,表有行和列组成。列划分为若干个列族(row family),如下:


1)        Row Key行键:Row Key是用来检索记录的主键,可以是任意字符串(最大长度是 64KB,实际应用中长度一般为10-100bytes)。HBase数据都是以字符串的形式存储的,数据也按照Row Key的字典序(byte order)排序存储,如int型排序应为1,10,100,11,12…,一般补零。

2)        Column Family列族:HBase表中的每个列,都属于某个列族。列族是表的框架的一部分(而列不是),必须在使用表之前即创建表的时候定义。列名都以列族作为前缀,例如baseData:name, baseData:age等都属于 baseData 这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。

3)        Column列:创建表的时候不需要定义好列,对列的引用格式通常为family:qualifier,qualifier也可以是任意的字节数组。同一个列族里qualifier的名称应该唯一,但不同的列族可以有相同的列名,因为列的引用必须带上列族名和冒号的前缀。列的数量也没有限制,可以有数百万个。列值也没有类型和长度限定。

4)        Timestamp/Version时间戳(版本号): HBase中通过RowKey和Column确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引,时间戳的类型是 64位整型。时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

5)        Key-Value Store键值存储:Cell是由{Row Key,Column Family, Column, Timestamp} àValue多维有序映射所唯一确定的单元。有序则是指按行健排序,Cell中的数据是没有类型的,全部是字节码形式存贮。

 

三、HBase表的物理存储

1. HRegion

HBase中的表我们称之为HTable,HTable按RowKey的字典序分割为多个HRegion(一般也就称为Region,建议10~1000个Region,每个Region 1~2GB),每个Region可以随意放到任意一台服务器中,这些存放Region的服务器叫做Region Server。所以我们说HRegion是分布式存储的最小单元。


 

另外如果在物理服务器中的Region太大,或者某一Region的数据增大到物理服务器压力过大,系统就会自动将他们动态地拆分,新增加的那个Region就会被分配到另一个相对压力较小的服务器上;相反地,如果服务器的负载很小,系统就会把多个Region合并,减少存储文件的数量以减少管理压力。所以我们说HRegion是扩展和负载均衡的最小单元。


 

所以我们说,HRegion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上,但一个Hregion是不会拆分到多个server上的。

2. Store

HRegion是分布式存储的最小单元,但并不是存储的最小单元。事实上,每个HRegion是由一个或者多个Store组成,而且一个Store保存HTable中的一个Column Family。这也从存储结构上验证了我们说的HBase是面向列的。进一步,每个Store又由一个memStore和0至多个StoreFile组成。


memStore在写入数据时相当于缓存,StoreFile是以HFile的形式保存在HDFS上。每次更新数据时,都会先将数据记录记录在提交日志中,HBase中叫预写日志WAL(write-ahead log)或Hlog,Hlog是存放在磁盘中的;同时数据记录会写入内存中的memStore,一旦内存保存的写入数据的累计大小超过了一个给定的阈值,系统就会将这些数据移出内存作为HFile文件刷写到磁盘中,写入完成之后系统就会丢弃相应存储在Hlog中的数据。但如果期间发生断电或其他意外事故,内存中的数据还未来得及以HFile文件写入到磁盘就被清空了,此时系统就会从Hlog中恢复丢失的那些数据到memStore再重新作为HFile写入磁盘。

3. HFile*

         HFile是HBase中实际的文件存储单元,为支持HBase的随机查询,HFile结构分为6个部分,如下:


1)        Data数据块:保存表中的数据,每一个数据块由块头和一些KeyValue(record)组成,Key值是严格按照字典序存储的。块大小默认为64K,这一部分可以压缩存储。在查询数据时,是以数据块为单位从硬盘load到内存。查找数据时,是顺序的遍历该块中的key-Value对。

2)        Meta元数据块: (可选的)保存用户自定义的Key-Value对,(注:我理解为辅助索引),可以被压缩。比如booleamfilter就是存在元数据块中的,该块只保留value值,key值保存在元数据索引块中。每一个元数据块由块头和value值组成。可以快速判断key是都在这个HFile中。

3)        File Info文件元信息:不能被压缩,用户也可以在这一部分添加自己的元信息。

4)        Data Index数据块索引:每条索引的Key是被索引的Block的第一条记录的Key(格式为:头信息,数据块offset数据块大小块第一个记录的Key,........)。这个参数控制HFile中索引块的大小,默认值是128K,也就是说当索引的信息超过128K后,就会新分配一个索引块。HBase对于HFile的访问都是通过索引块来实现的,通过索引来定位所要查的数据到底在哪个数据块里面。

5)        Meta Index元数据索引:Meta数据块的索引。

6)        Trailer文件尾:这一段是定长的。保存了每一段(由一种类型的块组成)的偏移量,读取一个HFile时,会首先读取Trailer,Trailer保存了每个段的起始位置(段的Magic Number用来做安全check),然后,数据索引会被读取到内存中,这样,当检索某个Key时,不需要扫描整个HFile,而只需从内存中找到Key所在的Block,通过一次磁盘IO将整个Block读取到内存中,再找到需要的Key。数据索引块采用近期最少使用机制(LRU)淘汰。

 

四、HBase分布式系统架构

         1. Master Server

         HBase分布式系统中有3个组件(客户端,Master服务器,Region服务器),Master服务器是整个文件系统的大脑,它提供整个文件系统的目录信息,并且管理各个数据服务器。虽然只有一个Master服务器在工作,但它有一个备份Master服务器,此备份服务器在Master服务器的身后默默的拉取着Master服务器的日志,等待Master服务器宕机牺牲之后上位。

而Master Server主要的工作有:为Regionserver分配Region,负责Region Server的负载均衡,发现失效的Region Server并重新分配其上的Region,HDFS上的垃圾文件回收,处理schema更新请求

 

         2. Region Server

         分布式文件系统中的每一个文件,都被按Row Key的字典序被切分成若干HRegion,每个HRegion都冗余(即有副本)地存储在不同的服务器上,这些服务器称之为Region服务器。期向Master服务器汇报其状况,然后等待并处理命令,更快更安全的存放好数据。

 

         3. Client Server

整个分布式文件系统还有一个重要角色是客户端。它不和主控服务和数据服务一样,在一个独立的进程中提供服务,它只是以一个类库(包)的模式存在,为用户提供了文件读写、目录操作等APIs。


         4. Zookeeper

         ZooKeeper 是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。Zookeeper在HBase中的作用是:保证任何时候,集群中只有一个Master,存贮所有Region的寻址入口,实时监控Region Server的状态,将Region Server(管理区域服务器)的上线和下线信息实时通知给Master,存储Hbase的schema,包括有哪些table,每个table有哪些column family。


HBase知识博大精深,两三天的调研有错误在所难免,如有请指正,有任何问题可以请评论留言

 


参考文献网址:

HBase英文官方网站http://hbase.apache.org/

HBase中文官方文档http://abloz.com/hbase/book.html

HBase知识梳理http://blog.youkuaiyun.com/xtwolf008/article/details/16974725

HFile介绍http://blog.youkuaiyun.com/yangbutao/article/details/8394149

Zookeeper学习http://www.cnblogs.com/sunddenly/p/4033574.html

分布式系统概述http://bbs.chinaunix.net/thread-4095420-1-1.html

Google集群系统与Hadoop http://www.cnblogs.com/sunscz/archive/2012/11/21/2781739.html

HadoopHBaseZooKeeper关系http://blog.youkuaiyun.com/zhaonanemail/article/details/6624397

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值