`
fishyu0817
  • 浏览: 111291 次
  • 性别: 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去了解了一下结构和作用,暂时还没有需要使用的场景,不过对于各种开源项 目的设计有所了解,对自己的框架结构设计也会有很多帮助,因此分享 一下。

分享到:
评论

相关推荐

    基于springboot集成hbase过程解析

    "基于SpringBoot集成HBase过程解析" SpringBoot集成HBase是当前大数据处理和存储解决方案中的一种常见组合。HBase是基于Hadoop的分布式、可扩展的NoSQL数据库,能够存储大量的结构化和非结构化数据。SpringBoot则...

    HBase海量数据存储实战视频教程

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

    HBase学习利器:HBase实战

    - **第7章:构建实际应用**:通过一系列具体的案例研究,展示如何使用HBase构建复杂的应用程序,涵盖了从需求分析到系统设计、实现再到测试和部署的全过程。 #### 三、HBase核心技术详解 **1. 数据存储模型**:...

    hbase社区2018精选资料

    HBase是一个高性能的开源NoSQL数据库,属于BigTable的开源实现,其分布式、多版本、面向列的特点使其适合存储和处理大量的非结构化数据。随着大数据技术的发展,HBase面临着更复杂多样的数据格式和业务需求,因此...

    python3连接hbase包

    HBase 是一个分布式、可扩展的列式数据库,它建立在 Apache Hadoop 文件系统之上,非常适合存储非结构化和半结构化数据。Python3 作为广泛使用的编程语言,通过特定的库可以方便地与 HBase 进行交互。 在这个场景中...

    HBase官方文档

    案例研究是通过实际的例子展示HBase如何在不同的应用场景下工作。这包括Schema设计和性能、故障排除方面的案例。 ### 运维管理 运维管理章节介绍了HBase的工具和实用程序,帮助管理员更好地维护和管理HBase集群。 ...

    Hbase 组件 、架构

    HRegionServer是HBase集群运行在每个工作节点上的服务组件,负责维护Master分配给它的Region,处理对这些Region的读写请求,并在Region运行过程中进行切分。当Region变得过大时,HRegionServer会负责将它分割成两个...

    Hbase 安装与基本使用

    本文将深入探讨HBase的安装过程以及基本使用方法,旨在帮助初学者快速上手。 **一、HBase简介** HBase是Google Bigtable的开源实现,它在Hadoop文件系统(HDFS)之上构建,提供了高度可扩展性和实时读写能力。HBase...

    hbase的rowkey设计与hbase的协处理器运用.docx

    6. 高性能:底层的 LSM 数据结构和 Rowkey 有序排列等架构上的独特设计,使得 HBase 具有非常高的写入性能。 HBase 的读写过程 HBase 的读写过程可以分为两部分:写数据流程和读数据流程。 写数据流程 写数据...

    hbase权威指南源码

    解压后的`hbase-book-master`包含项目的基本目录结构,如`src/main/java`用于存放Java源代码,`src/main/resources`存储资源配置文件,`pom.xml`是Maven项目对象模型,定义了项目的构建过程和依赖关系。 2. **...

    mysql2hbase.7z

    MySQL到HBase的数据迁移是大数据领域常见的操作,尤其是在传统关系型数据库向分布式NoSQL数据库转换的过程中。本资源“mysql2hbase.7z”提供了一种解决方案,由于Sqoop已经停止更新,不再支持较新的HBase版本,因此...

    hbase安装与hbase架构说明

    在HBase的架构中,Client是用户与系统交互的接口,它通过远程过程调用(RPC)机制与HMaster和HRegionServer通信。对于数据读写操作,Client直接与HRegionServer交互,而对于表管理和元数据操作,Client则与HMaster...

    hbase导出csv,文本,html文件

    2. **数据导入Hive**:创建一个Hive外部表,该表与HBase表结构对应,然后使用`LOAD DATA`命令将HBase查询结果导入Hive。这一步需要配置HBase与Hive之间的连接,例如通过设置`hbase-site.xml`和`core-site.xml`的属性...

    hbase1.0.3_part2

    3. **HBase的Compaction**:Compaction是HBase中用于合并HFile的过程,目的是减少Region内的文件数量,提高读取效率。有两种类型的Compaction:Minor和Major,前者只合并同一Region的小文件,后者会合并所有文件,...

    Hbase集群部署.pdf

    总结来说,HBase集群部署涉及到多个层面的知识点,包括对HBase结构的理解、虚拟机环境的配置、JDK的安装和配置、SSH无密码登录的设置,以及HBase的配置。这些知识点不仅对于理解HBase的工作原理至关重要,而且对于...

    hbase 示例

    HBase,全称为Apache HBase,是一款开源的分布式数据库,基于Google的Bigtable设计思想构建,是...通过研究这些内容,你可以深入理解HBase在实际应用中的工作方式,同时也能提升你在大数据处理和分布式存储领域的技能。

    HBase 2.0 MOB 保存图片小视频利器-upload_HBase2.0MOB_

    在HBase 2.0中,使用MOB存储图片和小视频的过程大致如下: 1. 配置启用MOB:在HBase的配置文件(如hbase-site.xml)中,添加或修改以下参数: - `hbase.mob.enabled`: 设置为true启用MOB功能。 - `hbase.mob....

    hbase备份和数据恢复

    在大数据领域,HBase是一个基于Hadoop的分布式数据库,它为海量结构化和半结构化数据提供了高可靠性、高性能的存储方案。HBase备份和数据恢复是系统运维中至关重要的一环,确保了业务连续性和数据安全性。同时,...

    hbase

    HBase则在HDFS之上提供了一个数据模型,使得非结构化和半结构化数据可以被高效地存储和查询。 HBase的体系架构主要包含以下组件: 1. **Master节点(HMaster)**:HMaster是HBase集群的管理节点,负责区域服务器的...

    Apache HBase Release 1.0

    HBase专门用于存储非结构化和半结构化的稀疏数据集,并且能够通过列式存储的方式进行水平扩展,支持高吞吐量的读写操作,非常适合实现数据仓库的实时读写需求。 HBase 1.0版本的发布标志着该项目的重要里程碑,它是...

Global site tag (gtag.js) - Google Analytics