分布式数据库 Apache HBase

分布式数据库 Apache HBase

Apache
Java
跨平台
Apache
2008-10-27

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。

上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。

此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

HBase访问接口

1.       Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据

2.       HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用

3.       Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据

4.       REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制

5.       Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计

6.       Hive,当前Hive的Release版本尚没有加入对HBase的支持,但在下一个版本Hive 0.7.0中将会支持HBase,可以使用类似SQL语言来访问HBase

HBase数据模型

Table & Column Family

Row KeyTimestampColumn Family
URIParser
r1t3url=http://www.taobao.comtitle=天天特价
t2host=taobao.com 
t1  
r2t5url=http://www.alibaba.comcontent=每天…
t4host=alibaba.com 

Ø  Row Key: 行键,Table的主键,Table中的记录按照Row Key排序

Ø  Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number

Ø  Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。

Table & Region

当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理:

-ROOT- && .META. Table

HBase中有两张特殊的Table,-ROOT-和.META.

Ø  .META.:记录了用户表的Region信息,.META.可以有多个regoin

Ø  -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region

Ø  Zookeeper中记录了-ROOT-表的location

Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过client端会做cache缓存。

MapReduce on HBase

在HBase系统上运行批处理运算,最方便和实用的模型依然是MapReduce,如下图:

HBase Table和Region的关系,比较类似HDFS File和Block的关系,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的将HBase Table作为Hadoop MapReduce的Source和Sink,对于MapReduce Job应用开发人员来说,基本不需要关注HBase系统自身的细节。

HBase系统架构

Client

HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC

Zookeeper

Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到 Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的 单点问题,见下文描述

HMaster

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

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

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

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

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

HRegionServer

HRegionServer主要负责响应用户I/O请求,向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合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进 行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要 进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前 Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上。下图描述了Compaction和Split的过程:

在理解了上述HStore的基本原理后,还必须了解一下HLog的功能,因为上述的HStore在系统正常工作的前提下是没有问题的,但是在分布式 系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。 每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(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.       HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File

HFile

下图是HFile的存储格式:

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

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

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

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

HLogFile

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

HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的KeyValue,可参见上文描述。

结束

本文对HBase技术在功能和设计上进行了大致的介绍,由于篇幅有限,本文没有过多深入地描述HBase的一些细节技术。目前一淘的存储系统就是基于HBase技术搭建的,后续将介绍“一淘分布式存储系统”,通过实际案例来更多的介绍HBase应用。

介绍内容来自:http://www.searchtb.com/2011/01/understanding-hbase.html

加载中

评论(3)

巴拉迪维
巴拉迪维
Rowkey 设计真可以单独当一门学问来研究哇!
Ryan-瑞恩
Ryan-瑞恩
HBase 最新文档:http://hbase.apache.org/book.html#ttl

Apache HBase 2.0.4 发布,分布式数据库

Apache HBase 2.0.4 已发布,HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。 HB...

01/06 07:43

Apache HBase 2.0.3 发布,分布式数据库

Apache HBase 2.0.3 已发布,HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。 HB...

2018/12/04 07:21

Apache HBase 2.1.1 发布,分布式数据库

Apache HBase 2.1.1 发布了,HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。 HB...

2018/11/02 07:31

Apache HBase 1.2.7 发布,分布式数据库

Apache HBase 1.2.7 发布了,HBase 1.2.7 是 HBase 1.2 系列中的最新维护版本,继续以向 Hadoop 和 NoSQL 社区提供稳定、可靠的数据库为目标。此版本包括 250 多个自 1.2.6 以来的错误修复。...

2018/09/27 07:46

Apache HBase 2.0.2 发布,Hadoop 数据库

Apache HBase 2.0.2 发布了。HBase 2.0.2 是 HBase 2.0.x 系列中的第二个补丁版本,旨在实现提高 HBase 的稳定性和可靠性。 此版本包含自 2.0.1 以来大约 100 多个问题修复。 所有hbases-2....

2018/09/03 08:20

Apache HBase 2.1.0 发布,分布式数据库

Apache HBase 2.1.0 发布了,HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。 HB...

2018/07/23 06:59

Apache HBase 2.0.0 发布,Hadoop 数据库

Apache HBase 2.0.0 发布了,HBase 2.0.0 是 HBase 的第二个主要版本。 此次更新信息如下: 一个新的区域分配管理器(“AMv2”), 用于配置读取和/或写入路径以运行堆外的装置,以及可选的内...

2018/05/03 06:45

分布式数据库 Apache HBase 2.0.0 第二个 Beta 版发布

Apache HBase 2.0.0 的第二个 Beta 版已发布,Apache HBase 2.0.0-beta-2 是 2.0 版本的非生产预览版,包含之前 alpha 版本中的所有新特性 (new assignment manager, offheap read/write pa...

2018/03/08 07:37

分布式数据库 Apache HBase 2.0.0 首个 Beta 版发布

Apache HBase 2.0.0 的首个 Beta 版已发布,Apache HBase 2.0.0-beta-1 是 2.0 版本的非生产预览版,包含之前 alpha 版本中的所有新特性 (new assignment manager, offheap read/write path...

2018/01/17 07:59

分布式数据库 Apache HBase 1.4.0 带来新功能和改进

Apache HBase 1.4.0 已发布,该版本是 1.4 系列的首个维护版本,目标仍是为 Apache 大数据生态系统等周边带来稳定可靠的数据库。 作为次要版本,1.4.0 包含许多新功能和改进,但它们不会出现...

2017/12/21 07:07

没有更多内容

加载失败,请刷新页面

5
回答
请教南京的小伙伴:java开发或者大数据开发环境怎么样

请教南京的小伙伴:java开发或者大数据开发环境怎么样(薪资、福利等)?有哪些好公司可以考虑?12年2月至今一直在深圳,前3年纯java,后4年java和...

02/12 10:03
3
回答
您好,Hive大数据导入Hbase,二进制数据类型如何导入

@王二铁 你好,想跟你请教个问题: 现在使用Hive生成HFile的方式导入Hbase, 数据类型为Int,Long等数据无法转成相应的Bytes存入Hb...

2018/12/23 12:23
3
回答
WARN org.apache.zookeeper.ClientCnxn: Session 0x0 for server null

` 我估计是ZOOKEEPER启动不起来,请大家帮我看看是什么原因,我研究了两天了,实在不知道怎么弄了 使用文件如下: CentOS_5.5_Final....

2012/09/21 12:52
6
回答
我用hue执行hive SQL的时候 hbase报connectionException
漓江 的回答 2016/11/05 09:17
最佳答案
一点建议。hue没有搭建过,不知道是否可行 1)确认你所有的节点时间都是同步的 2)使用./bin/beeline远程连接hive确认是否可以正常执行 3)确认你的hbase集群是否正常,看提示信息,在连接hbase:meta系统表的时候出现等待超时异常
1
回答
HBASE数据导入问题

我使用hbase的import工具把hdfs中的数据导入了hbase中,我要怎么才可以确定数据已经导入成功了呢?数据量特别大,不可能通过观察数据得到结论

2018/07/20 16:15
2
回答
hbase rowkey 问题

一份全量 用户数据 格式 简单描述为 userid1_k1_20160616 -> value userid1_k2_20160616 -> value ...

2016/06/16 22:13
1
回答
hbase连接异常

创建连接的时候报此异常,客户端连接代码如下 public void createTable() { Configuration config = HBas...

2017/11/11 11:32
4
回答
solr能实现hbase的二级索引?

solr能实现hbase的二级索引 ? 或者谁有更好的方案

2017/10/11 17:28
1
回答
Solr 倒排元数据,存入HBase

我有这么个想法,如下: 1.Solr 分词后倒排信息存入 HBase; 2. 检索的时候,Solr 读取 HBase 中存储的数据,支持实时检索业务; 3...

2017/08/28 17:53
3
回答
java调hbase 出错了

15/09/09 02:01:34 INFO zookeeper.RecoverableZooKeeper: Process identifier=hco...

2015/09/09 17:24

没有更多内容

加载失败,请刷新页面

HBase入门教程

课程介绍 HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File ...

2017/10/23 13:44
330
0
HBase学习(一)

HBase介绍 可以参考的书籍:HBase权威指南 -------------------------------------------------------------------听视频---------------------------------------------------------------...

01/08 11:26
4
0
hbase0.94.14伪分布式安装

使用自带的zookeeper

2016/01/14 19:18
61
1
hbase 配置

接上 hadoop配置 hadoop和hbase配套版本: hbase 0.92 – hadoop 0.22 hbase 0.94 – hadoop 0.23 hive 0.9 – hadoop 0.20.x pig 0.10 – hadoop 0.20.x 部署的版本: hbase-0.92.0 tar -zv...

2013/05/09 10:35
131
0
Ambari中使用Spark连结Hive读取Hbase映射表

[TOC] 在Ambari中使用SparkSQL连结Hive读取Hbase映射表时,需要在修改配置如下. 对应组件版本 spark2.3.0 hive3.0.0 hbase2.0.0 Ambari2.7.1 HDP3.0 建立软连接 在所有的SparkClient目录中增...

01/22 15:45
0
0
HBase入门教程

基本了解: HBase:是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(F...

2018/11/20 11:27
1
0
hadoop(八) - hbase集群环境搭建

1. 上传hbase安装包hbase-0.96.2-hadoop2-bin.tar.gz 2. 解压 tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C /cloud 3. 配置hbase集群,要修改3个文件(首先zk集群已经安装好了) 注意:要把...

2015/04/27 17:27
13
0
HBase 伪分布式安装教程

If you have successfully configured Hadoop on a single machine in pseudo-distributed mode and looking for some help to use Hbase on top of that then you may find this writeup us...

2012/11/26 14:55
898
0
企业打开云HBase的正确方式,来自阿里云云数据库团队的解读

摘要: 一、HBase的历史由来 HBase是一个开源的非关系型分布式数据库(NoSQL),基于谷歌的BigTable建模,是一个高可靠性、高性能、高伸缩的分布式存储系统,使用HBase技术可在廉价PC Server...

2018/05/31 15:59
15
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部