`
fishyu0817
  • 浏览: 110258 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hbase 结构及工作过程

阅读更多

最近关注 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的原子操作。 框架结构及流程 hbase_1.PNG

 

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,分别代表了缓存,日志,持久层。通过一次更新流程来看一下这 三部分的作用:

hbase_2.PNG


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海量数据存储实战视频教程

    从HBase的集群搭建、HBaseshell操作、java编程、架构、原理、涉及的数据结构,并且结合陌陌海量消息存储案例来讲解实战HBase 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...

    java大数据作业_3HBase

    1. 请用java集合的代码描述HBase的表结构 2. 请简述HBase中数据写入最后导致Region分裂的全过程 3. 如果设计一个笔记的表,表中要求有笔记的属性和笔记的内容,怎么做 4. HBase部署时如何指定多个zookeeper 5. HBase...

    Hbase分析报告白皮书

    本分析报告白皮书描述Hadoop结构与Hbase配置过程与Hbase结构

    大数据实验三-HBase编程实践

    一.实验内容 HBase编程实践: 1)在Hadoop基础上安装HBase; 2)使用Shell命令(create:创建表 ...实验过程截图及说明 1、安装HBase (1)解压HBase文件到/usr/local目录下,并将目录改名为hbase:

    Hbase安装及客户端测试及笔记

    配置文件同步其他服务器启动服务查看HBase 页面HBase Shell操作基本操作表的操作HBase数据结构RowKeyColumn FamilyCellTime Stamp命名空间Hbase 原理读流程写流程数据Flush过程数据合并过程HBase Api 操作环境准备...

    HBase企业应用开发实战

    , 本书内容在三个维度上具有重要特色:功能维度,从HBase的安装配置、参数设置,到数据模型、表结构设计、客户端使用、高级特性,本书做了系统且详尽的介绍;实战维度,不仅通过3个典型的应用案例详细讲解了如何使用...

    hbase-1.2.0-cdh5.10.0.tar.gz

    大数据开发过程中所要用到的安装包Hbase,这个安装包是CDH公司的产品。HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。

    Windows7下eclipse调试Fedora虚拟机的hadoop+hbase伪分布式

    公司进行战略调整阶段,终于可以闲下心来潜心研究分布式应用Hadoop。至于hadoop的应用结构,在这里不必多说...三、Fedora服务器Hbase配置安装过程 四、Windows下eclipse配置hadoop插件 五、Eclipse运行WordCount项目

    详解Hadoop核心架构HDFS+MapReduce+Hbase+Hive

    通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。通过这一阶段的调研总结,从内部机理的...

    hbase基本介绍

    本文并未涉及hbase数据库的安装,具体安装过程网上都比较详细,也可参考《hbase权威指南》hbase是google公司bigtable的开源实现,hbase基于hadoop的hdfs主要是对hadoop分布式文件系统hdfs的有效补充。因为hdfs存在...

    Hbase布隆过滤器详解

    介绍布隆过滤器的原理,实现,结构,优缺点,以及误判率估计和最优哈希个数,其中还有含有公式的详细推到过程。

    libhbase:HBase 的“C”API

    这将使用以下结构在target目录中构建包含头文件、共享库和 jar 的 tarball。 +---bin +---conf +---include | \---hbase +---lib | \---native \---src \---examples \---async 头文件可以在include文件夹下找到...

    hbridge:HBridge 为 Scala 受众解锁了 HBase 的功能

    重新阐明 HBase 的数据结构,而不是强迫它进入 ORM 风格的氛围。 充分利用 Scala 的类型系统——编译器应该验证模式的完整性。 做一个冗长的 DSL——尽量减少样板代码,但要易于阅读! 项目状态 该项目目前正在...

    Mapreduce实验报告.doc

    在整个过程中,Mapreduce库函数 负责原始数据的切割,中间key/value对集的聚合,以及任务的调度,容错、通 信控制等基础工作。而用户定义的map和reduce函数则根据实际问题确定具体操 作。 2. 框架的基本结构和执行...

    大数据查询——HBase读写设计与实践

    原实现基于Oracle提供存储查询服务,随着数据量的不断增加,在写入和读取过程中面临性能问题,且历史数据仅供业务查询参考,并不影响实际流程,从系统结构上来说,放在业务链条上游比较重。本项目将其置于下游数据...

    java-study:java-study 是本人学习Java过程中记录的一些代码!从Java基础的数据类型、jdk1.8的Lambda、Stream和日期的使用、 IO流、数据集合、多线程使用、并发编程、23种设计模式示例代码、常用的工具类, 以及一些常用框架,netty、mina、springboot、kafka、storm、zookeeper、redis、elasticsearch、hbase、hive等等

    是本人学习Java过程中记录的一些代码!从Java基础的数据类型、jdk1.8的使用、IO、集合、线程等等技术以及一些常用框架,netty、mina、springboot、kafka、storm、zookeeper、es、redis、hbase、hive等等。 使用 ...

Global site tag (gtag.js) - Google Analytics