最近关注
Hadoop
,因此
也顺便关注了一下
Hadoop相关的项目
。
HBASE就是基于
Hadoop的一个开源项目,也是对
Google的
BigTable的一种实现。
BigTable是什么?
Google的
Paper对其作了充分的说明。字面上看就是一张大表,其实和我们想象的传统数据
库的表还是有些差别的。松散数据可以说是介于
Map
Entry(
key & value)和
DB
Row之间的一种数据。在我使用
Memcache的时候,有时候的需求是需要存储的不仅仅是简单的一个
key对应一个
value,可能我需要类似于数据库表结构中多属性的存储,但是又不会有传统数据库表结构中那么多关联关系的需求,其实这类数据就是所谓的
松散数据。
BigTable最浅显来看就是一张很大的表,表的属性可以根据需求去动态增加,但是又没有
表与表之间关联查询的需求。
互联网应用有一个最大的特点,就是速度,功能再强大,速度慢,还是会被舍弃。因此在大访问量的网站都采
取前后的缓存来提升性能
和响应时间。对于
Map Entry类型的数据,集中式分布式
Cache都有很多选择,对于传统的关系型数据,从
MySQL
到
Oracle都给了很好的支持,唯有松散数据这类数据,采用前后两种解决方案都不能最大化它的处理能力。因此
BigTable才有了它用武之地。
HBASE作为
Apache的开源项目,也是出于起
步阶段,因为其实它所依赖的
Hadoop也不能说已经到了成熟阶段,所以都有很大的发展空间,这也为我
们这些开源爱好者提供了更多空间去贡献。这里主要会谈到
HBASE的框架设计方面的知识和它的一些特
点,不论是否采用
HBASE去解决工作中的问题
,一种好的流程设计总会给开发者和架构
设计者带来一些思想上的火花。
HBASE
设计介绍
数据模型
HBASE中的每一张表,就是所谓的
BigTable。
BigTable会存储一系列的行记录,行记录有三个基本类型的定义:
Row Key,Time Stamp,Column。
Row Key是行在
BigTable中的唯一标识,
Time Stamp是每次数据操作对应关联的时间戳,可以看作
类似于
SVN的版本,
Column定义为:
<family>:<label>,通过这两部分可以唯一的指定一个数据的存储列,
family的定义和修改需
要对
HBASE作类似于
DB的
DDL操作,而对于
label的使用,则不需要定义直接可以使用,这也为动态定制列
提供了一种手段。
family另一个作用其实在于物理存储优化读写操作,同
family的数据物理上保存的会比较临近,因此在业务设计的过程中可以利用这个特性。
看一下逻辑数据模型:
Row Key
|
Time Stamp
|
Column
"contents:"
|
Column
"anchor:"
|
Column
"mime:"
|
"com.cnn.www"
|
t9
|
|
"anchor:cnnsi.com"
|
"CNN"
|
|
t8
|
|
"anchor:my.look.ca"
|
"CNN.com"
|
|
t6
|
"<html>..."
|
|
|
"text/html"
|
t5
|
"<html>..."
|
|
|
|
t3
|
"<html>..."
|
|
|
|
上表中有一列,列的唯一标识为
com.cnn.www,每一次逻辑修改都有一个
timestamp关联对应,一共有四个列定义:
<contents:>,<anchor:cnnsi.com>,<anchor:my.look.ca>,<mime:>。如果用传统的概念来将
BigTable作解释,那么
BigTable可以看作一个
DB Schema,每一个
Row就是一个表,
Row key就是表名,这个表根据列的不同可以划分为多个版本,
同时每个版本的操作都会有时间戳关联到操作的行。
再看一下
HBASE的物理数据模型:
Row Key
|
Time Stamp
|
Column
"contents:"
|
"com.cnn.www"
|
t6
|
"<html>..."
|
t5
|
"<html>..."
|
t3
|
"<html>..."
|
Row Key
|
Time Stamp
|
Column
"anchor:"
|
"com.cnn.www"
|
t9
|
"anchor:cnnsi.com"
|
"CNN"
|
t8
|
"anchor:my.look.ca"
|
"CNN.com"
|
Row Key
|
Time Stamp
|
Column
"mime:"
|
"com.cnn.www"
|
t6
|
"text/html"
|
物理数据模型其实就是将逻辑模型中的一个
Row分割成为根据
Column
family存储的物理模型。
对于
BigTable的数据模型操作的时候,会锁定
Row,并保证
Row的原子操作。
框架结构及流程
下载
(8.41 KB)
2009-11-21 11:06
图
1
框架结构图
HBASE依托于
Hadoop的
HDFS作为存储基础
,因此结构也很类似于
Hadoop的
Master-Slave模式,
Hbase Master
Server 负责管理所有的
HRegion Server,但
Hbase
Master Server本身并不存储
HBASE中的任何数
据。
HBASE逻辑上的
Table被定义成为一个
Region存储在某一台
HRegion Server上,
HRegion
Server 与
Region的对应关系是一对多的关系。每一个
HRegion在物理上会被分为三个部分:
Hmemcache、
Hlog、
HStore,分别代表了缓存,日志,持久层。通过一次更新流程来看一下这
三部分的作用:
下载
(10.03 KB)
2009-11-21 11:06
图
2
提交更新以及刷新
Cache
流程
由流程可以看出,提交更新操作将会写入到两部分实体中,
HMemcache和
Hlog中,
HMemcache就是为了提高效率在内存中建立缓存,保证了部分最近操
作过的数据能够快速的被读取和修改,
Hlog是作为同步
Hmemcache和
Hstore的事务日志,在
HRegion Server周期性的发起
Flush Cache命令的时候,就会将
Hmemcache中的数据持久化到
Hstore中,同时会清空
Hmemecache中的数据,这里采用的是比较简单的策略来做数据缓存和同步,复杂一些其实可以参照
java的垃圾收集机制来做。
在读取
Region信息的时候,优先读取
HMemcache中的内容,如果未取到再去读取
Hstore中的数据。
几个细节:
1.
由于每一次
Flash Cache,就会产生一个
Hstore
File,在
Hstore中存储的文件会越来越多,对性能也会产
生一定影响,因此达到设置文件数量阀值的时候就会
Merge这些文件为一个大文件。
2.
Cache大小的设置以及
flush的时间间隔设置需要考虑内存消
耗以及对性能的影响。
3.
HRegion Server每次重新启动的时候会将
Hlog中没
有被
Flush到
Hstore中的数据再次载入到
Hmemcache,因此
Hmemcache过大对于启动的速度也有直接影响。
4.
Hstore File中存储数据采用
B-tree的算法,因此也
支持了前面提到对于
Column同
Family数据
操作的快速定位获取。
5.
HRegion可以
Merge也可以被
Split,根据
HRegion的大小决定。不过在做这些操作的时候
HRegion都会被锁定不可使用。
6.
Hbase Master Server通过
Meta-info Table来获取
HRegion Server的信息以及
Region的信息,
Meta最顶部的一个
Region是虚拟的一个叫做
Root Region,通过
Root
Region可以找到下面各个实际的
Region。
7.
客户端
通过
Hbase Master
Server获得了
Region所在的
Region
Server,然后就直接和
Region Server进行交
互,而对于
Region Server相互之间不通信,只和
Hbase Master
Server交互,受到
Master Server的监控和管理。
后话
对
HBase
还没有怎
么使用,仅仅只是看了
wiki去了解了一下结构和作用,暂时还没有需要使用的场景,不过对于各种开源项
目的设计有所了解,对自己的框架结构设计也会有很多帮助,因此分享
一下。
分享到:
相关推荐
从HBase的集群搭建、HBaseshell操作、java编程、架构、原理、涉及的数据结构,并且结合陌陌海量消息存储案例来讲解实战HBase 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...
1. 请用java集合的代码描述HBase的表结构 2. 请简述HBase中数据写入最后导致Region分裂的全过程 3. 如果设计一个笔记的表,表中要求有笔记的属性和笔记的内容,怎么做 4. HBase部署时如何指定多个zookeeper 5. HBase...
本分析报告白皮书描述Hadoop结构与Hbase配置过程与Hbase结构
一.实验内容 HBase编程实践: 1)在Hadoop基础上安装HBase; 2)使用Shell命令(create:创建表 ...实验过程截图及说明 1、安装HBase (1)解压HBase文件到/usr/local目录下,并将目录改名为hbase:
配置文件同步其他服务器启动服务查看HBase 页面HBase Shell操作基本操作表的操作HBase数据结构RowKeyColumn FamilyCellTime Stamp命名空间Hbase 原理读流程写流程数据Flush过程数据合并过程HBase Api 操作环境准备...
, 本书内容在三个维度上具有重要特色:功能维度,从HBase的安装配置、参数设置,到数据模型、表结构设计、客户端使用、高级特性,本书做了系统且详尽的介绍;实战维度,不仅通过3个典型的应用案例详细讲解了如何使用...
大数据开发过程中所要用到的安装包Hbase,这个安装包是CDH公司的产品。HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。
公司进行战略调整阶段,终于可以闲下心来潜心研究分布式应用Hadoop。至于hadoop的应用结构,在这里不必多说...三、Fedora服务器Hbase配置安装过程 四、Windows下eclipse配置hadoop插件 五、Eclipse运行WordCount项目
通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。通过这一阶段的调研总结,从内部机理的...
本文并未涉及hbase数据库的安装,具体安装过程网上都比较详细,也可参考《hbase权威指南》hbase是google公司bigtable的开源实现,hbase基于hadoop的hdfs主要是对hadoop分布式文件系统hdfs的有效补充。因为hdfs存在...
介绍布隆过滤器的原理,实现,结构,优缺点,以及误判率估计和最优哈希个数,其中还有含有公式的详细推到过程。
这将使用以下结构在target目录中构建包含头文件、共享库和 jar 的 tarball。 +---bin +---conf +---include | \---hbase +---lib | \---native \---src \---examples \---async 头文件可以在include文件夹下找到...
重新阐明 HBase 的数据结构,而不是强迫它进入 ORM 风格的氛围。 充分利用 Scala 的类型系统——编译器应该验证模式的完整性。 做一个冗长的 DSL——尽量减少样板代码,但要易于阅读! 项目状态 该项目目前正在...
在整个过程中,Mapreduce库函数 负责原始数据的切割,中间key/value对集的聚合,以及任务的调度,容错、通 信控制等基础工作。而用户定义的map和reduce函数则根据实际问题确定具体操 作。 2. 框架的基本结构和执行...
原实现基于Oracle提供存储查询服务,随着数据量的不断增加,在写入和读取过程中面临性能问题,且历史数据仅供业务查询参考,并不影响实际流程,从系统结构上来说,放在业务链条上游比较重。本项目将其置于下游数据...
是本人学习Java过程中记录的一些代码!从Java基础的数据类型、jdk1.8的使用、IO、集合、线程等等技术以及一些常用框架,netty、mina、springboot、kafka、storm、zookeeper、es、redis、hbase、hive等等。 使用 ...