HBase学习总结

原创 2013年12月03日 14:16:27

HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在需要实时读写、随机访问超大数据集时,可以使用HBase这一Hadoop应用。

传统行式数据库和列式数据库的区别:

传统行式数据库:数据是按行存储的。没有索引的查询使用大量IO。建立索引和物化视图需要花费大量时间和资源。面对查询的需求,数据库必须被大量膨胀才能满足性能要求。

列式数据库:数据按列存储(每一列单独存放)。数据即是索引。只访问查询涉及的列(大量降低系统IO)。每一列由一个线索来处理(查询的并发处理)。数据类型一致,数据特征相似(高效压缩)。

-Root-&&.META.Table

.META.:记录了用户表的Region信息,它可以有多个region。

-Root-:记录了.META.表的信息,-Root-只有一个Region。

ZooKeeper中记录了-Root-表的Location。

HBase架构:

HMaster:

HMaster没有单点问题,HBase中可以启动多个HMaster,通过ZooKeeper的Master Election机制保证总有一个Master运行,HMaser在功能上主要负责Table和Region的管理工作:

1.管理用户对Table的增、删、改、查操作。

2.管理HRegionServer的负载均衡,调整Region分布。

3.在Region Split后,负载新Region的分配。

4.在HRegionServer停机后,负责失效HRegionServer上的Region迁移。

HRegionServer

HRegionServer主要负责相应用户的IO请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。

HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集合的存储单元。一次最好将具备共同IO特性的column放在一个Column Family中,这样最高效。

HStore存储是HBase存储的核心,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFIle(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFile合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的Compact过程中进行的。这使得用户的写操作只要进入内测总就可以立即返回,保证了HBase IO的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。



HLog的功能:

上述的HStore在系统正常工作的前提下市没有问题的,但是在分布式系统环境中,无法避免系统出错或者宕机。因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中。HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的Region重新分配,领取到这些Region的HRegionServer在Load Region的过程总,会发现现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

HBase存储格式:

HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类型:

1.HFile,HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile。

2.HLogFile,HBase中WAL(Write Ahead Log)的存储格式,物理上是Hadoop的Sequence File。

HFile的存储格式:

首先,HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo。Trailer中有指针指向其他数据块的起始点。FileInfo中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data Index和Meta Index块记录了每个Data块和Meta块的起始点。

Data Block是HBase IO的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制。每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询。每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成,Magic内容就是一些随机数字,目的是防止数据损坏。

HFile里面的每个KeyValue对就是一个简单的Byte数组。但是这个byte数组里面包含了很多项,并且有固定的结构。具体结构:

开始是两个固定长度的数值,分别表示Key的长度和Value的长度。紧接着是Key,开始是固定长度的数值,开始是RowKey的长度,紧接着是RowKey,然后是固定长度的数值,表示Family的长度,然后是Family,接着是Qualifier,然后是两个固定长度的数值,表示Time Stamp和Key Type(Put/Delete)。Value部分没有这么复杂的结构,就是纯粹的二进制数据。

HLogFile:

HLog文件就是一个普通的Hadoop Sequence File,Sequence File的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和Region名字外,同时还包括Sequence number和timestamp,timestamp是“写入时间”,Sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。HLog Sequence File的Value是HBase的KeyValue对象。


版权声明:本文为博主原创文章,未经博主允许不得转载。

HBase学习总结(2):HBase介绍及其基本操作

(HBase是一种数据库:Hadoop数据库,它是一种NoSQL存储系统,专门设计用来快速随机读写大规模数据。在已成功安装并正常启动的前提下,本文介绍HBase的基本操作。) 一、HBase简介 ...
  • zhouzxi
  • zhouzxi
  • 2015年06月29日 14:44
  • 3073

总结对Docker这个东西的想法

记得一开始的时候,还只能在一些网站上看到关于Docker零星的一些消息,之后的不久,有关Docker消息就遍布网络。是什么因素让Docker火起来的? 或者说什么原因促使大家都对Docker感兴趣并...
  • qq1010885678
  • qq1010885678
  • 2015年08月28日 00:03
  • 1248

大数据学习——HBase 入门

HBase学习环境shiyanlou 《HBase介绍、安装与应用案例》 - CentOS6.6 64位 - JDK 1.7.0_55 64位 - Hadoop 1.1.2Hbase 介绍...
  • xundh
  • xundh
  • 2017年04月19日 22:16
  • 764

学习Hadoop第二十四课(HBase 简单入门)

上节课我们一起简单学习了Shell脚本,这节课我们来简单学习一下HBase,首先我们来看一下HBase的简介,如下图所示。       接下来我们一块儿看一下HBase的几个概念,首先来看第一个概念...
  • u012453843
  • u012453843
  • 2016年10月30日 11:54
  • 1086

HBase学习与开发经验总结

问题导读: 1. NOSQL是如何产生的以及Hbase 在NOSQL中的地位如何? 2. Hbase框架是如何架构出来的 ? 3. Hbase 是如何检索一条数据以及检索时间复杂度是多少? ...
  • zhangshangui_2015
  • zhangshangui_2015
  • 2016年10月20日 11:17
  • 785

HBase知识总结

HBase知识总结学习 1、HBase基本概念:Row key,Column Family、Column、Timestamp、Value、存储类型、存储结构。2、HBase基础知识。3、HBase基本...
  • u013160017
  • u013160017
  • 2017年02月19日 16:37
  • 398

HBase性能优化方法总结

本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法。有关HBase系统配置级别的优化,这里涉及的不多。...
  • Lord_War
  • Lord_War
  • 2017年12月24日 20:43
  • 63

Hbase 知识点记录总结(1)

先总结一下几个基本比较重要的名词 RegionServer    :  Region读写操作的场所 Master : 管理Region的分配,基于zooKeeper感应RegionServ...
  • benluobobo
  • benluobobo
  • 2015年12月01日 09:29
  • 893

hbase重点总结

Hbase                                                官网:http://hbase.apache.org/ 1、hbase rowkey怎么创...
  • Kumquatlemon
  • Kumquatlemon
  • 2017年11月14日 11:20
  • 242

Hbase总结(一)-hbase命令

下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', '列名称1'...
  • doupeihua
  • doupeihua
  • 2016年08月27日 11:16
  • 397
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HBase学习总结
举报原因:
原因补充:

(最多只允许输入30个字)