HBase原理详细概述
HBase,Hadoop DataBase的简称
是一种非关系型数据库,not only SQL。
HBase是一个分布式的架构,底层是HDFS的架构,由各个DataNode组成。
HBase体系结构
- 一、Hbase架构原理
- 1、Client:
- 2、Zookeeper:
- 3、HMaster
- 4、HRegionServer
- 5、HDFS
- 6、write-AheadLogs
- 7、HRegion
- 8、Store
- 9、MemStore
- 10、HFile
- 二、数据结构
- 1、RowKey
- 2、Column Family
- 3、Cell
- 4、TimeStamp
- 三、HBase原理
- 1、元数据存储
- 2、读流程
- 3、写流程
- 4、数据Flush过程
一、Hbase架构原理
HBase是主从结构,如下图所示,由Client、Zookeeper、HMaster、HRegionServer、HDFS等几个组件组成
1、Client:
- 客户端,可以是HBase Shell、JavaAPI客户端、RestAPI等。
- 提供访问接口,维护对应的缓存加速HBase的访问
- Client缓存Region的位置信息,减少获取源数据的时间
- 首次请求时加载cache,后面直接使用cache中的信息
2、Zookeeper:
通过ZK来做HMaster的高可用、HRegionServer的监控、元数据的入口以及集群配置的维护
- 选举机制保证集群中只有一个HMaster
- 监控HRegionServer状态,HRS异常时,通过Master收到ZK的通知(上下线)
- 通过ZK存储元数据的统一入口地址
- .ZooKeeper 中存储了 hbase:meta 表的位置,客户端可以通过 ZooKeeper 查 找到 hbase:meta 表的位置,hbase:meta 是 hbase 当中一张表,肯定是由一个 HRegionServer 来 管 理 , 其 实 主 要 就 是 要 通 过 ZooKeeper 的 “/hbase/meta-region-server”获取存储“hbase:meta”表的 HRegionServer 的地 址。
3、HMaster
- 监控HRS,HRegionServer停机后,处理HRS的故障转移。
- HRegion分裂后,负责新的HR的分配
- 处理元数据的变更,比如对表的增删改操作
- 在空闲时间对数据进行负载均衡,调整HRegion分布,在HRS间迁移HR以达到负载均衡
- 通过Zookeeper发布自己的位置给客户端
4、HRegionServer
HRegionServer负责响应用户读写的IO请求,一台机器一个,功能如下
- 和底层HDFS交互,存储数据到HDFS
- 处理分配给它的HRegion
- 刷新缓存到HDFS
- 维护HLog日志存储文件
- 处理来自客户端的读写请求
- 负责处理HRegion变大后的拆分
- 负责StoreFile的合并工作
5、HDFS
HDFS为HBase提供最终的底层数据存储服务,提供高可用的支持
- 提供元数据和表数据的底层分布式存储服务
- 数据多副本,保证集群的高可靠和高可用性
6、write-AheadLogs
- 预写数据,写在内存之间,先写在一个叫做Write-Ahead logfile的文件中之后,在写入内存中。
- 系统故障后,数据可以通过这个日志文件重建
- HLog是每个HRS对应一个
7、HRegion
- 表的横向切分,HBase表的分片
- 一个表根据RowKey切分成HRegion分散存储在不同的HRS中,一个HRS中可以有多个不同的HRegion(可以是来自不同的表)
8、Store
- 每个HRegion内部又分为多个Store,一个Store对应表中的一个列簇
- 即一个store,是由1/N的rowkey和一个列簇组成
9、MemStore
- 内存存储,位于内存中,保存当前的数据操作
- 当数据保存在WAL中之后,HRS会在内存中存储键值对
10、HFile
- 磁盘上保存原始数据的实际物理文件
- StoreFile是以HFile的形式存储在HDFS的
- 文件内容是二进制
二、数据结构
1、RowKey
- 功能:检索、排序、根据RowKey范围裂变
- 被保存为字节数组,即字符串
- 访问表中的某一行,可以根据Rowkey的具体某个值、RowKey的正则Range访问、全表扫描
2、Column Family
- 可以理解为关系型数据表中的多列划分为HBase表的一列
- 一个列簇对应HDFS上的一个目录
- 列簇是标的schema的一部分(列不是),在使用表之前就需要被定义
- 列名义列簇作为前缀,比如courses:history,courses:math 都属于 courses 这个列簇
- 每一个列簇对应一个Store,也对应HDFS一个目录,类似Hive分区操作
3、Cell
- 由{RowKey,ColumnFamily,Version}唯一确定的单元,可以看成是一个存储空间,类似Excel中的单元格。比如{RowKey=10,ColumnFamily,Version}
- Version就是TimeStamp时间戳
- Cell中数据没有类型,以字节码的形式存储
4、TimeStamp
- 每个Cell都保存着同一份数据的多个版本,版本通过时间戳来索引
- 由HBase在数据写入时自动赋值,64位整型,精确到毫秒的当前系统实际
- 两种数据版本回收方式:保存数据的最后n个版本;保存最近一段时间的内版本(比如最近七天)
三、HBase原理
1、元数据存储
- 可以通过60010WebUI查看hbase:eta存储的元数据信息
- scan 'hbase:meta’查看表元数据信息的内容,一行对应一个单一的Region。
2、读流程
- Client 先访问 ZooKeeper,查找-ROOT-表,获取.META.表信息,然后从 meta 表读取 Region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 Region 信息;
- 根据 RowKey 在 meta 表中找到对应的 Region 信息;
- 找到这个 Region 对应的 RegionServer;
- 查找对应的 Region;
- 先从 MemStore 找数据,如果没有,再到 BlockCache 里面读;
- BlockCache 还没有,再到 StoreFile 上读(为了读取的效率);
- 如果是从 StoreFile 里面读取的数据,不是直接返回给客户端,而是先写入 BlockCache,再返回给客户端。 从整体的方面看,如下图所示
3、写流程
- Client 先访问 ZooKeeper,查找-ROOT-表,获取.META.表信息,然后从 meta 表读取 Region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 Region 信息;
- 根据 namespace(类似与关系型数据库中的数据库)表名和 RowKey 在 Meta 表中找到该 RowKey 应该写入到哪个 Region。
- 找到这个 Region 对应的 RegionServer,并发送写数据请求
- HRegionServer 将数据先写到 HLog(Write Ahead Log)。为了数据的持 久化和恢复;
- HRegionServer 将数据写到内存(MemStore);
- 反馈 Client 写成功。
写数据这一块也可以看出,HBase 将数据写入到内存中后,就返回给客户端写入成功,响应非常快。这也是为什么 HBase 写数据速度快的原因。
4、数据Flush过程
- HBase写数据写入到MemStore内存就会返回客户端,没有直接落盘,因此磁盘IO非常小,插入数据速度很快
- 但当MenStore数据达到阀值(128M)时,HRS将数据刷到HDFS上生成HFile,然后将内存中的数据删除,同时删除HLog中的历史数据。
- 该操作由HRS自己完成。
HBase原理详细概述相关推荐
- hbase原理详细解析
一.hbase架构 hbase是主从架构的设计模式,一般有一主多从或多主多从,zookeeper负责协调hbase集群主要是负责一些元数据的存储,主指的是hmaster,从指的是hregionserv ...
- 《HBase原理与实践》阅读笔记
学习笔记(1-3章) 全书概述 1.HBase概述 1.1.Hbase发展历史 1.2.Hbase数据模型 1.3.Hbase体系结构 1.4.Hbase系统特性 2.Hbase基础数据结构与算法 2 ...
- JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用
http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/index.html 一.系统架构 本文以一个实际的产品为例,来说明 JPEG 在其中的应用. ...
- EJB是什么Java使用EJB容器的详细概述
EJB是什么 博客分类: java EJB 最近项目中接触到EJB,但对EJB不是很了解,于是网上找了些资料参考,下面这篇是个人感觉讲的比较清晰的,遂转载一起参考,文章转自https://www.c ...
- HBase的详细介绍(概念以及特性)
1 什么是hbase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE的目标是存储并处理大型的数 ...
- 彷徨 | HBase的详细介绍(概念以及特性)
1.什么是hbase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE的目标是存储并处理大型的数 ...
- HBase原理之数据读取流程
和写流程相比,HBase读数据是一个更加复杂的操作流程,这主要基于两个方面的原因:其一是因为整个HBase存储引擎基于LSM-Like树实现,因此一次范围查询可能会涉及多个分片.多块缓存甚至多个数据存 ...
- JPEG 原理详细分析
一 JPEG 概述 JPEG 是 Joint Photographic Experts Group 的缩写,即 ISO 和 IEC 联合图像专家组,负责静态图像压缩标准的制定,这个专家组开发的算法就被 ...
- HBase原理深入解析(一)----HBase架构总览
前言:掌握Hbase的重要性不言而喻,掌握Hbase的设计原理更是重中之重.本文是对HBase原理进行讲解系列文章的开篇,尽量详细地从整体上介绍HBase的架构,对每个部分的名词进行初步解释,使我们对 ...
最新文章
- python集合用法详解(创建、添加(add()、update())、删除(remove()、discard()、pop())、查找(in、not in))
- 排序算法----桶排序(java版)
- 解决冲突的拉链法探测的ASL
- 边缘计算高考题!全答对就可以去华为上班!
- cmake vscode 高亮_vscode中cmake项目管理和调试
- In the beginning, many people on Wall Street did
- 转载:认识自我,把握机遇 —— 谢恩伟 (二)
- 计算机c盘满了怎么搬家,c盘占满了,怎么清理
- 信息隐藏与数字水印实验4-LSB信息隐藏的卡方分析
- Android 国内集成使用谷歌地图
- java公告栏按月查询_求java公告栏特效代码
- QInputDialog,QTextEdit,QLineEdit,Qt右键菜单英文转中文问题
- 关于removebg官网与API
- 简单实现通讯录中文名字按拼音首字母排序
- 艺赛旗(RPA)【服务端】修改服务器访问端口
- 【C++】Placement New
- java毕业设计物资租赁管理系统mybatis+源码+调试部署+系统+数据库+lw
- 思维导图软件哪个免费更好用?MindManager、iMindMap、MindMappe
- 北邮世纪,一个走过的人。
- 电脑插入U盘后识别不出来,怎么办