Hbase 系列(一)基本概念
Hbase 系列(一)基本概念
HBase 是 Apache 旗下一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。利用 HBase 技术可在廉价 PC 服务器上搭建起大规模的存储化集群。使用 HBase 可以对数十亿级别的大数据进行实时性的高性能读写,在满足高性能的同时还保证了数据存取的原子性。
一、HBase 基本概念
大数据具有以下特征:volume(体量大)、variety(样式多)、velocity(速度快)、valueless(价值密度低)
Hbase(Hadoop Database)是一个高可靠、高性能、面向列、可伸缩的分布式数据库,利用 Hbase 技术可在廉价 PC 上搭建起大规模结构化存储集群。 Hbase 参考 Google 的 Big Table 建模,使用类似 GFS 的 HDFS 作为底层文件存储系统,在其上可以运行 Mapreduce 批量处理数据,使用 Zookeeper 作为协同服务组件。
二、HBase 与 Hadoop

HBase 底层依赖 Hadoop,所以选择 Hadoop 版本对 HBase 部署很关键(https://blog.csdn.net/sunny05296/article/details/54089194)
三、HBase 四大核心组件
Hadoop 框架包含两个核心组件: HDFS 和 Mapreduce,其中 HDFS 是文件存储系统,负责数据存储; Mapreduce 是计算框架,负责数据计算。它们之间分工明确、低度耦合、相关关联。对于 Hbase 数据库的核心组件,即核心功能模块共有 4 个,它们分别是:客户端 Client、协调服务模块 Zookeeper、主节点 Master 和 Region 节点 Region Server,这些组件的描述和相互之间的关联关系如图所示。

3.1 客户端
Client 客户端 C1ient 是整个 Hbase 系统的入口。使用者直接通过客户端操作 Hbase。客户端使用 Hbase 的 RPC 机制与 Master 和 Region Server 进行通信。对于管理类操作, Client 与 Master 进进行 RPC 通信;对于数据读写类操作, Client 与 Regionserver 进行 RPC 交互。这里客户端可以是多个, 并不限定是原生 Java 接口,还有 Thrift、Avro、Rest 等客户端模式,甚至 Mapreduce 也可以算作一种客户端。
3.2 客户端协调服务组件 Zookeeper
Zookeeper Quorum(队列)负责管理 Hbase 中多 Master 的选举、服务器之间状态同步等。再具体一些就是, Hbase 中 Zookeeper 实例负责的协调工作有:存储 Hbase 元数据信息、实时监控 Region Server、存储所有 Region 的寻址入口,当然还有最常见的功能就是保证 Hbase 集群中只有一个 Master 节点。
3.3 主节点 HMaster
HMaster 没有单点问题,在 Hbase 中可以启动多个 HMaster,通过 Zookeeper 的 Master 选举机制保证总有一个 Master 正常运行并提供服务,其他 HMaster 作为备选时刻准备(当目前 HMaster 出现问题时)提供服务。 HMaster 主要负责 Table 和 Region 的管理工作。
- 管理用户对 Table 的增、删、改、査操作。
- 管理 Region Server 的负载均衡,调整 Region 分布。
- 在 Region 分裂后,负责新 Region 的分配。
- 在 Region Server 死机后,负责失效 Region Server 上的 Region 迁移。
3.4 Region 节点 HRegionServer
HRegionServer 主要负责响应用户 I/O 请求,向 HDFS 文件系统中读写数据,是 Hbase 中最核心的模块。 HRegionServer 内部管理了一系列 HRegion 对象,每个 HRegion 对应了 Table 中的一个 Region。 HRegion 由多个 HStore 组成,每个 HStore 对应了 Table 中的一个 Column Family 的存储。可以看出每个 Column Family 其实就是一个集中的存储单元,因此最好将具备共同 I/O 特性的列放在一个 Column Family 中,这样能保证读写的高效性。HRegionServer 的组成结构如图2所示。
如图2所示, Hstore 存储是 Hbase 存储的核心,由两部分组成: MemStore 和 StoreFile。 MemStore 是 Sorted Memory Buffer,用户写入的数据首先会放入 MemStore 中,当 MemStore 满了以后会缓冲(flush)成一个 StoreFile(底层实现是 HFile),当 StoreFile 文件数量增长到一定阈值,会触发 Compact 操作,将多个 StoreFiles 合并成一个 StoreFile,在合并过程中会进行版本合并和数据删除,因此可以看出 HBase 其实只有增加数据,所有的更新和删除操作都是在后续的 Compact 过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了 HBase I/O 的高性能。

StoreFiles 在触发 Compact 操作后,会逐步形成越来越大的 StoreFile,当单个 StoreFile 大小超过一定阈值后,会触发 Split 操作,同时把当前 Region 分裂成 2 个 Region,父 Region 会下线,新分裂的 2 个子 Region 会被 Master 分配到相应的 HRegionServer 上,使得原先 1 个 Region 的压力得以分流到 2 个 Region 上。
每个 HRegionServer 中都有一个 HLog 对象,HLog是一个实现 Write Ahead Log 的类,在每次用户操作写入 MemStore 的同时,也会写一份数据到 HLog 文件中,HLog 文件定期会滚动出新,并删除旧的文件(已持久化到 StoreFile 中的数据)。在 HRegionServer 意外终止后, Master 会通过 Zookeeper 感知到,首先处理遗留的 HLog 文件,将其中不同 Region 的 Log 数据进行拆分,分别放到相应 Region 的目录下,然后再将失效的 Region 重新分配,领取到这些 Region 的 HRegionServer 在加载 Region 的过程中,会发现有历史 HLog 需要处理,因此会将 HLog 中的数据回放到 MemStore 中,然后缓冲(flush)到 StoreFiles,完成数据恢复。
每天用心记录一点点。内容也许不重要,但习惯很重要!
Hbase 系列(一)基本概念的更多相关文章
- hbase系列之:独立模式部署hbase
一.概述 在上一篇博文中,我简要介绍了hbase的部分基础概念,如果想初步了解hbase的理论,可以参看上一篇博文 hbase系列之:初识hbase .本博文主要介绍独立模式下部署hbase及hbas ...
- RxJava系列2(基本概念及使用介绍)
RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...
- ElasticSearch 2 (28) - 信息聚合系列之高层概念
ElasticSearch 2 (28) - 信息聚合系列之高层概念 摘要 和查询表达式(query DSL)一样,聚合也有一种可编辑的语法:可以根据我们的需要混合以及匹配使用独立的功能单元.这也就是 ...
- hbase系列之:初识hbase
一.概述 在hadoop生态圈里,hbase可谓是鼎鼎大名.江湖传言,hbase可以实现数十亿行X数百万列的实时查询,可横向扩展存储空间.如果传言为真,那得好好了解了解hbase.本文从概念上介绍hb ...
- HBase 系列(三)HBase Shell
HBase 系列(三)HBase Shell ./hbase shell # 进入 hbase 命令行 (1) HBase 命令帮助 help # 查看 HBase 所有的命令 create # 或 ...
- HBase 系列(二)安装部署
HBase 系列(二)安装部署 本节以 Hadoop-2.7.6,HBase-1.4.5 为例安装 HBase 环境.HBase 也有三种模式:本地模式.伪分布模式.分布模式. 一.环境准备 (1) ...
- net必问的面试题系列之基本概念和语法
上个月离职了,这几天整理了一些常见的面试题,整理成一个系列给大家分享一下,机会是给有准备的人,面试造火箭,工作拧螺丝,不慌,共勉. 1.net必问的面试题系列之基本概念和语法 2.net必问的面试题系 ...
- Hbase系列文章
Hbase系列文章 HBase(一): c#访问hbase组件开发 HBase(二): c#访问HBase之股票行情Demo HBase(三): Azure HDInsigt HBase表数据导入本地 ...
- HBase 系列(二)—— HBase 系统架构及数据结构
一.基本概念 一个典型的 Hbase Table 表如下: 1.1 Row Key (行键) Row Key 是用来检索记录的主键.想要访问 HBase Table 中的数据,只有以下三种方式: 通过 ...
随机推荐
- [Luogu4899][IOI2018] werewolf 狼人
luogu sol \(\mbox{IOI2018}\)的出题人有没有看过\(\mbox{NOI2018}\)的题目呀... \(\mbox{Kruskal}\)重构树+二维数点. 题目相当于是问你从 ...
- 华为OJ:2199 推断输入字符串中的括号匹配
依据不同的括号有个计数器.在遍历时.当计数器小于0则返回false或者当遍历完后,计数器仍旧不为零,也返回false. import java.util.Scanner; public class b ...
- java自动装箱和自动拆箱
启蒙:https://droidyue.com/blog/2015/04/07/autoboxing-and-autounboxing-in-java/ 1,比较:=比就和string一样比较地址,有 ...
- 【转】MySQL存储过程中使用动态行转列
MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...
- C++ 实例化对象 p->printX()
一.从栈实例化对象 我们首先定义一个类,类的名字叫TV,里面包括两个成员变量,两个成员函数. class TV // 定义一个电视的类TV { public: ]; // 定义类的属性,一个数组 in ...
- C++ 函数特性_参数默认值
函数参数默认值写法 有默认参数值的参数必须在参数表的最右边 ,) // 这是正确的写法 , int k) // 这是错误写法 先声明,后定义 在写函数时要先在代码前面声明,然后再去定义. 函数默认参数 ...
- Bootstrap-CL:导航栏
ylbtech-Bootstrap-CL:导航栏 1.返回顶部 1. Bootstrap 导航栏 导航栏是一个很好的功能,是 Bootstrap 网站的一个突出特点.导航栏在您的应用或网站中作为导航页 ...
- javascript的创建对象object.create()和属性检测hasOwnPrototype()和propertyIsEnumerable()
Object.create("参数1[,参数2]")是E5中提出的一种新的对象的创建方式. 第一个参数是要继承到新对象原型上的对象; 第二个参数是对象属性.这个参数可选,默认为fa ...
- ModelAttribute注解使用与spring重定向传参
@ModelAttribute可以用于修饰controller里的方法和参数,将被修饰的对象的值绑定到指定名称的属性里.当修饰方法时,方法返回的值会在该controller里每个访问处理前绑定一次.修 ...
- Python开发一个WEB聊天室
项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加. ...