1)、逻辑模型

Hbase 以表的形式存储数据,每个表由行和列组成,每个列属于一个特定的列族。

表中由行和列确定的存储单元称为一个元素,每个元素保存了同一份数据的多个版本,由时间戳来标识。行健是数据行在表中的唯一标识,并作为检索记录的主键。行健可以是任意字符串(最长64KB),并按照字典序进行存储。

访问表中行的三种方式:(1)通过单个行健访问(2)给定行健的范围访问(3)全表扫描

列的定义:<列族>:<限定符>,Hbase在磁盘上按照列族存储数据

元素由行健、列(<列族>:<限定符>)和时间戳唯一确定,元素中的数据以字节码的形式存储,没有类型之分。

2)物理模型

Hbase是按照列存储的稀疏行/列矩阵,物理模型实际上就是把概念模型中的一个行进行分割,并按照列族进行存储,表中的空值不被存储

3)Region服务器

Hbase在行的方向上将表分成了多个Region,每个Region包含了一定范围内(根据行健进行划分)的数据。每个表最初只有一个Region,随着表中记录数的不断增加超过某个阈值时形成新的Region。

Region是Hbase中分布式存储和负载均衡的最小单位,即一个表的所有Region会分布在不同的Region服务器上,但一个Region内的数据只会存储在一个服务器上。

物理上所有数据都存储在HDFS上,并由Region服务器提供数据服务,通常一台计算机只运行一个Region服务器程序(HRegionServer),每个HRegionServer管理多个Region实例(HRegion),其中HLog是用来做灾难备份的,使用的是预写式日志。

每个Region服务器只维护一个HLog,所有来自不同表的Region日志是混合在一起的,这样做的目的是不断追加单个文件,可以减少磁盘寻址次数,提高对表的写性能。但不易恢复。

每个Region有一个或多个Store组成,每个Store保存一个列族的所有数据。每个Store又是由一个memStore和零个或多个StoreFile组成,StoreFile则是以HFile的格式存储在HDFS上的。

当客户端进行更新操作时,先连接有关的HRegionServer,然后向Region提交变更。提交的数据互首先写入WAL和MemStore中,当MemStore中数据累积到某个阈值时,HRegionServer就会启动一个单独的线程将MemStore中的内容刷新到磁盘,形成一个StoreFile.

当StoreFile文件的数量增长到一定阈值后,就会将多个StoreFile合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出Hbase只有增加数据,所有的更新和删除操作都是在后续的合并中进行的。StoreFile在合并过程中会逐步形成更大的StoreFile,当单个StoreFile大小超过一定阈值后,会把当前的Region分割成两个Region,并由HMaster分配到相应的Region服务器上,实现负载均衡。

4)主服务器

HMaster将Region分配给Region服务器,协调Region服务器的负载并维护集群的状态。HMaster不会对外提供数据服务,而是由Region服务器负责所有Region的读写请求和操作。如果HRegionServer发生故障终止,Hmaster会通过ZooKeeper感知到并处理相应的Log文件,然后将失效的Region进行重新分配。此外,HMaster还负责管理表的schema和对元数据的操作。

因HMaster值维护表和Region的元数据而不参与数据的输入输出,HMaster失效仅会导致所有的元数据无法被修改,但表的数据读写还是可以正常进行的。

5)元数据表

用户表的Region元数据存储在.META.表中,随着Region增加,.META.表中数据也会增加,并分裂成多个Region。

为了定位.META.表中各个Region的位置,把.META.表中所有Region的元数据保存在-ROOT-表中,最后有ZooKeeper记录-ROOT-表的位置信息

客户端访问用户数据前先访问ZooKeeper获得-ROOT-的位置,然后访问-ROOT-表获得.META.表的位置,最后根据.META.表中的信息确定用户数据的存放位置

-ROOT-表永远不会被分割,它只有一个Region。.META.表的Region全部保存在内存中

4、Hbase的更多相关文章

  1. 大数据组件原理总结-Hadoop、Hbase、Kafka、Zookeeper、Spark

    Hadoop原理 分为HDFS与Yarn两个部分.HDFS有Namenode和Datanode两个部分.每个节点占用一个电脑.Datanode定时向Namenode发送心跳包,心跳包中包含Datano ...

  2. hadoop、hbase、hive、zookeeper版本对应关系

    本文引用自:http://www.aboutyun.com/blog-61-62.html 最新版本: hadoop和hbase版本对应关系: Hbase    Hadoop 0.92.0 1.0.0 ...

  3. Zookeeper、HBase的伪分布

    1.Zookeeper伪分布的部署(3个节点) 所谓的“伪分布式集群”就是在一台服务器中,启动多个Zookeeper实例.“完全分布式集群”是每台服务器,启动一个Zookeeper实例. 1.1.解压 ...

  4. HBase 1、HBase介绍和工作原理

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

  5. 基于Hadoop技术实现的离线电商分析平台(Flume、Hadoop、Hbase、SpringMVC、highcharts)

    离线数据分析平台是一种利用hadoop集群开发工具的一种方式,主要作用是帮助公司对网站的应用有一个比较好的了解.尤其是在电商.旅游.银行.证券.游戏等领域有非常广泛,因为这些领域对数据和用户的特性把握 ...

  6. 一、Hbase的安装

    一.Hbase配置 这个是我从网上找的一个版本,网上说配置成功. 先决条件: (1)hadoop的版本与hbase的版本要对应,主要是hadoop目录下的hadoop-core-1.0.4.jar的版 ...

  7. 四、Hbase

    一.什么情况下使用Hbase 例子: 这里Order By无时不刻的处理,我们要看到刚才的足迹,不能使用缓存技巧. 根据时间戳来查询,显然很快,应为Hbase就是以时间戳来存的. 将最近的数据放在内存 ...

  8. [转]云计算之hadoop、hive、hue、oozie、sqoop、hbase、zookeeper环境搭建及配置文件

     云计算之hadoop.hive.hue.oozie.sqoop.hbase.zookeeper环境搭建及配置文件已经托管到githubhttps://github.com/sxyx2008/clou ...

  9. Hbase_02、Hbase的常用的shell命令&Hbase的DDL操作&Hbase的DML操作(转)

    阅读目录 前言 一.hbase的shell操作 1.1启动hbase shell 1.2执行hbase shell的帮助文档 1.3退出hbase shell 1.4使用status命令查看hbase ...

  10. MongoDB、Hbase、Redis等NoSQL优劣势、应用场景

    NoSQL的四大种类 NoSQL数据库在整个数据库领域的江湖地位已经不言而喻.在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数 ...

随机推荐

  1. Distributed locks with Redis--官方

    原文:http://redis.io/topics/distlock Distributed locks with Redis Distributed locks are a very useful ...

  2. Python 文件操作模块 shutil 详解

    1.导入模块 shutil import shutil 2.shutil方法 2.1 shutil.copy(src,dst) //将 src 复制到 dst 保留文件权限    例:将Alan复制到 ...

  3. /lib /usr/lib /usr/local/lib 区别

    简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件.目录 /usr/lib ...

  4. 关于windows中的任务管理调度器

    windows中的任务管理调度器 任务管理调度器大概就是给windows设置一个任务,同时还可以设置这个任务的执行时间,执行次数等. 这个任务管理调度器是公司培训同事在讲studio中的job可以在s ...

  5. HashMap多线程死循环问题

    HashMap通常会用一个指针数组(假设为table[])来做分散所有的key,当一个key被加入时,会通过Hash算法通过key算出这个数组的下标i,然后就把这个<key, value> ...

  6. linux modelsim multicore(multithread)

    in file modelsim.ini, set WLFUseThreads = 1

  7. Java接口的表现形式

    一.概念理解 Java接口是一些方法特征的集合,并没有方法的具体实现,类似于电源插座,可以充不同类型的电器,但是必须适配特定的接口规范.接口是抽象化的,所以其不能被实例化的(不能有构造函数,创建对象) ...

  8. Filezilla FTP Server 设置帐号主目录文件夹的方法和多个帐号共享一个文件夹的方法

    1.点击用户头像进入 2.共享文件夹 3.添加共享文件夹 4.设置一个主目录 5.右键主目录 如图6设置别名,别名问主目录路径+别名名称 如:主目录[d:\pro\home\] 别名[aliases1 ...

  9. ASP生成静态文件编码为UTF-8格式的HTML文件

    一般在ASP环境下,运行动生静操作时都用到的是FSO,FSO是专门对文件进行操作的一个组件,FSO的编码属性只有三种,系统默认,Unicode,ASCII,并没有utf-8,所以一般中文系统上使用FS ...

  10. Java 三大主流框架概述

    Struts.Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案.但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的Java W ...