(完整版)hbase学习系统架构图
HBase技术平台详解
HLog文件会定期删除(已持久化到StoreFile中的 数据)
HBase表物理存储——HLog Replay
RegionServer挂掉,MemStore中数据会丢失 Master通过Zookeeper感知到RegionServer故障 Master将不同Region的Log数据进行拆分,并将
大到一定阈值,Region会等分为两个新的 Region 当表中的行不断增多,就会有越来越多的 Region
HBase表物理存储——Region
HBase表物理存储——Region
HBase表物理存储——Region
Region是HBase中分布式存储的最小单元 ,不是存储的最小单元
不同的Region可以分布在不同的 RegionServer上
长度(固定数值),Family,Qualifier,Time Stamp, KeyType(Put/Delete) Value部分:没有复杂的结构,纯粹的二进制数据
HBase表物理存储——HLog
HLog:RegionServer插入和删除过程记录操作内 容的日志
HBase表物理存储——HLog
失效的Region重新分配 领取到待恢复Region的RegionServer在Load
Region时,会Replay H Nhomakorabeaog中的数据到 MemStore
HBase表物理存储—— Compact And Split
StoreFile Compact后,会形成越来越大的 StoreFile
单个StoreFile大小超过一定阈值后,会触发Split ,把当前Region Split成2个Region
hbase基本原理ppt课件
现已作为产品被使用 Facebo❖Hbase在Hadoop 体系中的位置
4
Hbase数据库基本原理
1
1
Hbase介绍及特点
2Leabharlann Hbase逻辑视图3
Hbase物理模型
4
Hbase vs Oracle
2
Hbase简介
❖ HBase – 即Hadoop Database,是一个高可靠性、高性能、面向列、可伸 缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模 结构化存储集群。
Row Key : 与nosql数据库们一样,row key是用来检索记录的主键。 访问hbase table中的行,只有三种方式:
1、通过单个row key访问 2、通过row key的range 3、全表扫描 Row key行键 (Row key)可以是任意字符串(最大长度 是 64KB,实际应用 中长度一般为 10-100bytes),在 hbase内部,row key保存为字节数组。 存储时,数据按照Row key的字典序(byte order)排序存储。 设计key时,要充分利用排序存储这个特性,将经常一起读取的行存储放到 一起。(位置相关性)
21
物理部署
系统架构
22
Hbase vs Oracle
1、索引不同造成的行为差异 2、Hbase适合大量插入同时又有度的情况 3、Hbasede 瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间 4、Hbase很适合按照时间排序top n的场景 5、如下图,行标示访问:B树访问的弱点
hbase架构与原理
将一个数据表按Key值范围横向划分为一个个 的子表,实现分布式存储。
这个子表,在HBase中被称作“Region”。
每一个Region都关联一个Key值范围,即一个 使用StartKey和EndKey描述的区间。事实上,每 一个Region仅仅记录StartKey就可以了,因为它 的EndKey就是下一个Region的StartKey。
RegionServer是HBase的数据服务进程。负责处理 用户数据的读写请求。 Region被交由RegionServer管理。实际上,所有 用户数据的读写请求,都是和RegionServer上的 Region进行交互。 Region可以在RegionServer之间发生转移。
思考:
一个Region包含了一个Startkey和EndKey范围; 一条用户数据KeyValue必然属于一个唯一的Region; Region由RegionServer来管理,那么,这个路由信 息保存在哪里呢? Region如何才可以转移?由谁负责转移?
Row011 Row012
……….. Row020
Row021 Row022
……….. Row030
Row031 ……….. ……….. ………..
Region-1
StartKey,EndKey
Region-2
StartKey,EndKey
Region-3
StartKey,EndKey
Region-4
HBase介绍
前言
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式 数据库,设计目标是用来解决关系型数据库在处理海量数据 时的局限性。
本章主要介绍HBase的应用场景、功能与架构、关键流程、 常用命令和参数。
《hbase基础知识》课件
HBase是一个分布式、开源的NoSQL数据库,以Hadoop分布式文件系统 (HDFS)为底层存储,适用于大规模数据存储和处理。
介绍HBase
HBase是一个可扩展的、高可用的分布式数据库,基于Google的Bigtable论 文而设计。 它提供了强大的列式存储、实时读写、横向扩展和高容量存储能力。
2
HMaster
HMaster是HBase集群中的主节点,负责管理RegionServer和分配Region。
3
ZooKeeper
ZooKeeper是HBase集群的协调服务,用于选举HMaster并维护元数据。
HBase的读写操作
1 数据写入
将数据写入表格,指定行键、列族和列,可以实现快速的数据插入。
数据预分区
通过合理的预分区策略,可以均 匀分布数据并提高查询性能。
缓存机制
HBase支持缓存机制,减少数据 的读取次数,提升读取性能。
数据压缩
使用数据压缩技术,可以减小存 储空间,提高写入和读取性能。
2 数据读取
通过指定行键、列族和列,可以快速检索和获取存储在表格中的数据。
3 原子性操作
HBase支持原子性操作,保证数据的一致性和可靠性。
HBase的数据一致性
CAP定理
HBase采用CP模型,保证了数据 的一致性和分区容错性。
数据复制
HBase支持数据的复制,提高了 数据的可用性和容错性。
写前确认
HBase的写操作采用写前确认, 确保数据的一致性。
HBase的容错机制
1
数据复制
HBase使用数据复制来提高系统的容错性和可用性。
2
自动故障转移
HBase(三)HBase架构与工作原理
HBase(三)HBase架构与⼯作原理⼀、系统架构注意:应该是每⼀个 RegionServer 就只有⼀个 HLog,⽽不是⼀个 Region 有⼀个 HLog。
从HBase的架构图上可以看出,HBase中的组件包括Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等,接下来介绍他们的作⽤。
1、Client1、HBase 有两张特殊表:.META.:记录了⽤户所有表拆分出来的的 Region 映射信息,.META.可以有多个 Regoin-ROOT-:记录了.META.表的 Region 信息,-ROOT-只有⼀个 Region,⽆论如何不会分裂2、Client 访问⽤户数据前需要⾸先访问 ZooKeeper,找到-ROOT-表的 Region 所在的位置,然后访问-ROOT-表,接着访问.META.表,最后才能找到⽤户数据的位置去访问,中间需要多次⽹络操作,不过 client 端会做 cache 缓存。
2、ZooKeeper1、ZooKeeper 为 HBase 提供 Failover 机制,选举 Master,避免单点 Master 单点故障问题2、存储所有 Region 的寻址⼊⼝:-ROOT-表在哪台服务器上。
-ROOT-这张表的位置信息3、实时监控 RegionServer 的状态,将 RegionServer 的上线和下线信息实时通知给 Master4、存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family3、Master1、为 RegionServer 分配 Region2、负责 RegionServer 的负载均衡3、发现失效的 RegionServer 并重新分配其上的 Region4、HDFS 上的垃圾⽂件(HBase)回收5、处理 Schema 更新请求(表的创建,删除,修改,列簇的增加等等)4、RegionServer1、RegionServer 维护 Master 分配给它的 Region,处理对这些 Region 的 IO 请求2、RegionServer 负责 Split 在运⾏过程中变得过⼤的 Region,负责 Compact 操作可以看到,client 访问 HBase 上数据的过程并不需要 master 参与(寻址访问 zookeeper 和 RegioneServer,数据读写访问RegioneServer),Master 仅仅维护者 Table 和 Region 的元数据信息,负载很低。
HBase架构简介
HBase架构简介一、概览图1图1指出了在HBase中其实有两种文件,一种是write-ahead log,而另一种则是真正存储数据的地方。
而这些文件都被HRegionServers来处理。
从图中可以看出,文件最后在HDFS中存在不同的block中。
基本的通信流程是这样的:当一个client需要查询某一特点的row时,它会先连到Zookeeper(事实上是ZK管理的集群),并且从zookeeper获取持有-ROOT-的region的server name,有了这个信息以后,我们就可以去寻找包含刚刚我们查询的row的.META.的region的server name。
这些信息都会被客户端缓存下来。
最后,我们可以通过.META.找到持有我们所查询的rowkey的region。
一旦获取了这个row在哪个region中,这个信息也会被客户端缓存下来,所以下次再访问的时候,就可以直接访问那个region了。
过了一段时间后,客户端就会搜集到相当全面的信息:查询某row时应到哪个region去找,从而不需要去查询.META.了。
当HBase启动时,HMaster负责向各个RS分配region,其中当然也包括了-ROOT-和.META.某RS打开一个Region,这时会创建一个相应的HRegion对象,当HRegion打开时,它会为每一个HColumnFamily创建一个Store,每一个Store 都会有一个或者多个StoreFile的实例,它是对真正的存储文件HFile的轻量级封装。
每一个Store都会有一个MemStore,并且整个RS会共享一个HLog实例。
二、写当一个client向RS发起一个HTable.put(Put)的请求时,第一步先把数据写入write-ahead-log(WAL),被HLog所表示,这个WAL是一个标准的Hadoo SequenceFile,当Server挂掉以后再重启,WAL可以继续将未被持久化的数据持久化。
HBase主要运行机制
HBase主要运行机制HBase 的物理存储HBase 表中的所有行都是按照行键的字典序排列的。
因为一张表中包含的行的数量非常多,有时候会高达几亿行,所以需要分布存储到多台服务器上。
因此,当一张表的行太多的时候,HBase 就会根据行键的值对表中的行进行分区,每个行区间构成一个“分区(Region)”,包含了位于某个值域区间内的所有数据,如图1 所示。
图1 HBase的Region存储模式图Region 是按大小分割的,每个表一开始只有二个Region,随着数据不断插入到表中,Region 不断增大,当增大到一个阈值的时候,Region 就会等分为两个新的Region。
当表中的行不断增多时,就会有越来越多的Region,如图2 所示。
图2 HBase的Region分裂示意Region 是HBase 中数据分发和负载均衡的最小单元,默认大小是100MB 到200MB。
不同的Region 可以分布在不同的Region Server 上,但一个Region 不会拆分到多个Region Server 上。
每个Region Server 负责管理一个Region 集合。
如图3 所示。
图3 HBase的Region分布模式Region 是HBase 在Region Server 上数据分发的最小单元,但并不是存储的最小单元。
事实上,每个Region 由一个或者多个Store 组成,每个Store 保存一个列族的数据。
每个Store 又由一个memStore 和0 至多个Store File 组成,如图4 所示。
Store File 以HFile 格式保存在HDFS 上。
图4 HBase的Region存储模式HBase 的逻辑架构在分布式的生产环境中,HBase 需要运行在HDFS 之上,以HDFS 作为其基础的存储设施。
HBase 的上层是访问数据的Java API 层,供应用访问存储在HBase 中的数据。
HBase入门基础精品PPT课件
Client, Zookeeper
Client 1 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如 regione的位置信息。
Zookeeper 1 保证任何时候,集群中只有一个master 2 存贮所有Region的寻址入口。 3 实时监控Region Server的状态,将Region server的上线和下线信息实时通知 给Master 4 存储Hbase的schema,包括有哪些table,每个table有哪些column family
Column Family
◦ 列族在创建表的时候声明,一个列族可以包含多个列,列中的 数据都是以二进制形式存在,没有数据类型。
时间戳 (Time Stamp)
时间戳
◦ HBase中通过row和columns确定的为一个存贮单元称为cell。每 个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。
Master
Master 1 为Region server分配region 2 负责region server的负载均衡 3 发现失效的region server并重新分配其上的region 4 GFS上的垃圾文件回收 5 处理schema更新请求Biblioteka Region Server
Region Server 1 Region server维护Master分配给它的region,处理对这些region的IO请求 2 Region server负责切分在运行过程中变得过大的region 可以看到,client访问hbase上数据的过程并不需要master参与(寻址访问 zookeeper和region server,数据读写访问regione server),master仅仅维护者 table和region的元数据信息,负载很低。
深入理解HBase的原理及系统架构
深入理解HBase的原理及系统架构HBase的构成物理上来说,HBase是由三种类型的服务器以主从模式构成的。
这三种服务器分别是:Region server,HBase HMaster,ZooKeeper。
其中Region server负责数据的读写服务。
用户通过沟通Region server来实现对数据的访问。
HBase HMaster负责Region的分配及数据库的创建和删除等操作。
ZooKeeper作为HDFS的一部分,负责维护集群的状态(某台服务器是否在线,服务器之间数据的同步操作及master的选举等)。
另外,Hadoop DataNode负责存储所有Region Server所管理的数据。
HBase中的所有数据都是以HDFS文件的形式存储的。
出于使Region server所管理的数据更加本地化的考虑,Region server是根据DataNode分布的。
HBase的数据在写入的时候都存储在本地。
但当某一个region被移除或被重新分配的时候,就可能产生数据不在本地的情况。
这种情况只有在所谓的compaction之后才能解决。
NameNode负责维护构成文件的所有物理数据块的元信息(metadata)。
HBase结构如下图所示:RegionsHBase中的表是根据row key的值水平分割成所谓的region的。
一个region包含表中所有row key位于region的起始键值和结束键值之间的行。
集群中负责管理Region的结点叫做Region server。
Region server负责数据的读写。
每一个Region server大约可以管理1000个region。
Region的结构如下图所示:HBase的HMasterHMaster负责region的分配,数据库的创建和删除操作。
具体来说,HMaster的职责包括:•调控Region server的工作o在集群启动的时候分配region,根据恢复服务或者负载均衡的需要重新分配region。
Hadoop相关知识整理系列之一:HBase基本架构及原理
Hadoop相关知识整理系列之⼀:HBase基本架构及原理1. HBase框架简单介绍HBase是⼀个分布式的、⾯向列的开源数据库,它不同于⼀般的关系数据库,是⼀个适合于⾮结构化数据存储的数据库。
另⼀个不同的是HBase基于列的⽽不是基于⾏的模式。
HBase使⽤和 BigTable⾮常相同的数据模型。
⽤户存储数据⾏在⼀个表⾥。
⼀个数据⾏拥有⼀个可选择的键和任意数量的列,⼀个或多个列组成⼀个ColumnFamily,⼀个Fmaily下的列位于⼀个HFile中,易于缓存数据。
表是疏松的存储的,因此⽤户可以给⾏定义各种不同的列。
在HBase中数据按主键排序,同时表按主键划分为多个Region。
在分布式的⽣产环境中,HBase 需要运⾏在 HDFS 之上,以 HDFS 作为其基础的存储设施。
HBase 上层提供了访问的数据的 Java API 层,供应⽤访问存储在 HBase 的数据。
在 HBase 的集群中主要由 Master 和 Region Server 组成,以及 Zookeeper,具体模块如下图所⽰:简单介绍⼀下 HBase 中相关模块的作⽤:MasterHBase Master⽤于协调多个Region Server,侦测各个RegionServer之间的状态,并平衡RegionServer之间的负载。
HBaseMaster还有⼀个职责就是负责分配Region给RegionServer。
HBase允许多个Master节点共存,但是这需要Zookeeper的帮助。
不过当多个Master节点共存时,只有⼀个Master是提供服务的,其他的Master节点处于待命的状态。
当正在⼯作的Master节点宕机时,其他的Master则会接管HBase的集群。
Region Server对于⼀个RegionServer⽽⾔,其包括了多个Region。
RegionServer的作⽤只是管理表格,以及实现读写操作。
《HBase培训》课件
API进行数据访问。
HBa元格资源等常用资源。
HBase REST API使用示例
03
通过示例代码演示如何使用REST API进行数据访问
。
HBase Thrift API的使用
引入HBase Thrift库
需要在项目中引入HBase的Thrift库,以便使用Thrift API进行操作。
HBase Java API常用类
包括HBaseAdmin类、Table类、Put类、Get类等常用类。
HBase Java API使用示例
通过示例代码演示如何使用Java API进行表操作和数据操作。
HBase REST API的使用
启动HBase REST服务
01
介绍如何启动HBase的REST服务,以便通过REST
它提供了一种高效地存储非结构化和半结构化数据的方法,这些数据包括超大规模数据 表。
HBase的特点
高度可扩展
HBase可以在数千台机器上存储 数十亿行X百万列的数据。
面向列
HBase是一个面向列的存储系统, 这意味着数据在列上存储得更加紧 凑。
稀疏
由于HBase是一个稀疏存储系统, 这意味着您可以只存储实际数据, 而不会浪费空间来存储空值。
Bloom过滤器可以减少数据扫描 量,提高数据读取效率。
Part
06
HBase集群部署与维护
HBase集群的部署方案
部署环境准备
确保服务器硬件资源充足,包括CPU、内存、存储和网络 等,同时配置好操作系统和Java环境。
安装HBase软件
从HBase官方网站下载最新版本的HBase软件包,按照官 方文档进行安装和配置。
境进行选择和调整。
hbase 逻辑结构
hbase 逻辑结构HBase是一个分布式的高可靠性、高性能、面向列的NoSQL数据库系统,它建立在Hadoop的HDFS(分布式文件系统)之上。
HBase的逻辑结构主要包括表(table)、行(row)、列族(column family)、列(column)和单元格(cell)等几个重要的概念。
1. 表(Table):HBase中的数据以表的形式存储,表是按行存储的,每一行都有一个唯一的行键(row key)。
表可以看作是一系列行的集合,每一行都有多个列族。
2. 行(Row):表中的每一行都有一个唯一的行键(row key)。
行键在表中是唯一的,用于标识一行数据。
行键通常是字节流(byte array)类型,可以支持任意长度。
3. 列族(Column Family):HBase中的表可以划分为多个列族,每个列族包含一组列。
列族是逻辑上的概念,用于组织和管理数据。
所有的列族在创建表时必须指定,并且在表的生命周期中无法添加或删除。
4. 列(Column):列是表中实际存储数据的基本单元,由列名(column name)和列值(column value)组成。
列名是字符串类型,用于标识列的名称,列值可以是任意类型的数据。
列名必须属于表的某个列族。
5. 单元格(Cell):单元格是表中最小的存储单位,由行键、列族和列名确定。
每个单元格可以存储一个具体的列值。
在HBase中,表的数据按行存储,并且以行键为索引。
查询数据时,可以通过行键快速定位到具体的行,并根据需要获取该行的列族、列和列值。
列族的设计通常是在创建表时确定的,并且在表的生命周期中无法更改。
列的设计相对灵活,可以动态地添加或删除列。
HBase的逻辑结构提供了灵活的数据模型,适合存储大规模的结构化和半结构化数据。
同时,HBase通过分布式存储和水平扩展,能够提供高可靠性、高性能和高并发访问能力。
hbase逻辑结构
hbase逻辑结构HBase是一个分布式、可扩展的面向列的NoSQL数据库,它以Hadoop 的HDFS为底层存储,适用于大规模数据存储和实时查询。
HBase的逻辑结构由表、行、列和单元格组成。
1. 表(Table):HBase中的数据是以表的形式进行组织和存储的。
每个表都有一个唯一的名称,并被分割成若干个区域(Region),每个区域包含一部分行的数据。
表由列族(Column Family)组成,列族是逻辑上的概念,用于将相关的列进行分组。
表可以通过行键(Row Key)来进行访问和操作。
2. 行(Row):HBase的行是以行键进行唯一标识的,行键是一个可变长度的字节数组。
行中的数据以列族和列限定符(Column Qualifier)进行组织,可以有一个或多个列族。
行是按字典顺序存储的,因此查询时按行键的范围进行检索会更高效。
3. 列(Column):HBase的列是由列族和列限定符组成的。
列限定符是列族中的具体列的名字,它是一个可变长度的字节数组。
每个列可以包含多个版本(version)的数据,每个版本都有一个时间戳,可以通过时间戳来获取历史版本的数据。
4. 单元格(Cell):HBase中的单元格是行、列和时间戳的组合,它包含了一个特定的数据值。
单元格的数据值可以是任何类型的字节数组,因此HBase中的数据是以无模式(Schema-less)存储的。
HBase的逻辑结构与传统关系型数据库有所不同,它以键值对的方式存储数据,将表按行进行分割存储,并使用列族对列进行分组。
这种方式使得HBase在存储和查询大规模数据时更为高效和可扩展。
在HBase中,数据是按照顺序进行存储的,因此它适合于按行键范围进行检索的场景,能够提供快速的查询性能。
此外,HBase还支持自动分区和负载均衡,能够自动调整数据的分布,提高数据的可靠性和可用性。
总结起来,HBase的逻辑结构包括表、行、列和单元格,它以键值对的方式存储数据,并使用列族对列进行分组。
HBase(六):HBase体系结构剖析(上)
HBase(六):HBase体系结构剖析(上)HBase⾪属于hadoop⽣态系统,它参考了⾕歌的BigTable建模,实现的编程语⾔为 Java, 建⽴在hdfs之上,提供⾼可靠性、⾼性能、列存储、可伸缩、实时读写的数据库系统。
它仅能通过主键(row key)和主键的range来检索数据,主要⽤来存储⾮结构化和半结构化的松散数据。
与hadoop⼀样,Hbase⽬标主要依靠横向扩展,通过不断增加廉价的商⽤服务器,来增加计算和存储能⼒。
Hbase数据库中的表⼀般有这样的特点:⼤:⼀个表可以有上亿⾏,上百万列⾯向列:⾯向列(族)的存储和权限控制,列(族)独⽴检索稀疏:对于为空(null)的列,并不占⽤存储空间,因此,表可以设计的⾮常稀疏⽬录:系统架构数据模型RegionServernameSpaceHBase寻址系统架构:HBase采⽤Master/Slave架构搭建集群,由HMaster节点、HRegionServer节点、ZooKeeper集群组成,⽽在底层,它将数据存储于HDFS中,因⽽涉及到HDFS的NN、DN等,总体结构如下(注意:在介绍过,也可以将底层的存储配置为Azure Blob Storage或Amazon Web Services),图A较清楚表达各组件之间的访问及内部实现逻辑,图B更直观表达hbase 与 hadoop hdfs 部署结构及 hadoop NN 和 HMaster 的 SPOF 解决⽅案架构图A 架构图BClient的主要功能:1. 使⽤HBase的RPC机制与HMaster和HRegionServer进⾏通信2. 对于管理类操作,Client与HMaster进⾏RPC3. 对于数据读写类操作,Client与HRegionServer进⾏RPCZookeeper功能:1. 通过选举,保证任何时候,集群中只有⼀个master,Master与RegionServers 启动时会向ZooKeeper注册2. 实时监控Region server的上线和下线信息,并实时通知给Master3. 存贮所有Region的寻址⼊⼝和HBase的schema和table元数据4. Zookeeper的引⼊实现HMaster主从节点的failover5. 详细⼯作原理如下图:1.2. 在HMaster和HRegionServer连接到ZooKeeper后创建Ephemeral节点,并使⽤Heartbeat机制维持这个节点的存活状态,如果某个Ephemeral节点失效,则HMaster会收到通知,并做相应的处理3. HMaster通过监听ZooKeeper中的Ephemeral节点(默认:/hbase/rs/*)来监控HRegionServer的加⼊和宕机4. 在第⼀个HMaster连接到ZooKeeper时会创建Ephemeral节点(默认:/hbasae/master)来表⽰Active的HMaster,其后加进来的HMaster则监听该Ephemeral节点,如果当前Active的HMaster宕机,则该节点消失,因⽽其他HMaster得到通知,⽽将⾃⾝转换成Active的HMaster,在变为Active的HMaster之前,它会创建在/hbase/back-masters/下创建⾃⼰的Ephemeral节点HMaster功能:1. 管理HRegionServer,实现其负载均衡2. 管理和分配HRegion,⽐如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上3. 监控集群中所有HRegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态)4. 处理schema更新请求(创建、删除、修改Table的定义), 如下图:5.HRegionServer功能:1. Region server维护Master分配给它的region,处理对这些region的IO请求2. Region server负责切分在运⾏过程中变得过⼤的region⼩结:1. client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低2. HRegion所处理的数据尽量和数据所在的DataNode在⼀起,实现数据的本地化数据模型:Table:与传统关系型数据库类似,HBase以表(Table)的⽅式组织数据,应⽤程序将数据存⼊HBase表中Row: HBase表中的⾏通过RowKey 进⾏唯⼀标识,不论是数字还是字符串,最终都会转换成字段数据进⾏存储;HBase表中的⾏是按RowKey字典顺序排列Column Family: HBase表由⾏和列共同组织,同时引⼊列族的概念,它将⼀列或多列组织在⼀起,HBase的列必须属于某⼀个列族,在创建表时只需指定表名和⾄少⼀个列族Cell:⾏和列的交叉点称为单元格,单元格的内容就是列的值,以⼆进制形式存储,同时它是版本化的version: 每个cell的值可保存数据的多个版本(到底⽀持⼏个版本可在建表时指定),按时间顺序倒序排列,时间戳是64位的整数,可在写⼊数据时赋值,也可由RegionServer⾃动赋值注意:1. HBase没有数据类型,任何列值都被转换成字符串进⾏存储2. 与关系型数据库在创建表时需明确包含的列及类型不同,HBase表的每⼀⾏可以有不同的列3. 相同RowKey的插⼊操作被认为是同⼀⾏的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HBase 系统架构图组成部件说明Client:使用HBase RPC机制与HMaster和HRegionServer进行通信Client与HMaster进行通信进行管理类操作Client与HRegionServer进行数据读写类操作Zookeeper:Zookeeper Quorum存储-ROOT-表地址、HMaster地址HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况Zookeeper避免HMaster单点问题HMaster:HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Ma ster Election机制保证总有一个Master在运行主要负责Table和Region的管理工作:1 管理用户对表的增删改查操作2 管理HRegionServer的负载均衡,调整Region分布3 Region Split后,负责新Region的分布4 在HRegionServer停机后,负责失效HRegionServer上Region迁移HRegionServer:HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据HRegionServer管理一些列HRegion对象;每个HRegion对应Table中一个Region,HRegion由多个HStore组成;每个HStore对应Table中一个Column Family的存储;Column Family就是一个集中的存储单元,故将具有相同IO特性的Column放在一个Column Family会更高效HStore:HBase存储的核心。
由MemStore和StoreFile组成。
MemStore是Sorted Memory Buffer。
用户写入数据的流程:Client写入-> 存入MemStore,一直到MemStore满-> Flush成一个StoreFil e,直至增长到一定阈值-> 触发Compact合并操作-> 多个StoreFile合并成一个St oreFile,同时进行版本合并和数据删除-> 当StoreFiles Compact后,逐步形成越来越大的StoreFile -> 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Regio n Split成2个Region,Region会下线,新Split出的2个孩子Region会被HMaster 分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Regio n上。
由此过程可知,HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能。
HLog引入HLog原因:在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况工作机制:每个HRegionServer中都会有一个HLog对象,HLog是一个实现Write Ahead L og的类,每次用户操作写入Memstore的同时,也会写一份数据到HLog文件,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。
当HRegionServ er意外终止后,HMaster会通过Zookeeper感知,HMaster首先处理遗留的HLog文件,将不同region的log数据拆分,分别放到相应region目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到Stor eFiles,完成数据恢复。
HBase存储格式HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,格式主要有两种:1 HFile HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile2 HLog File,HBase中WAL(Write Ahead Log)的存储格式,物理上是Hado op的Sequence FileHFile图片解释:HFile文件不定长,长度固定的块只有两个:Trailer和FileInfoTrailer中指针指向其他数据块的起始点File Info中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_L EN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等Data Index和Meta Index块记录了每个Data块和Meta块的起始点Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏HFile里面的每个KeyValue对就是一个简单的byte数组。
这个byte数组里面包含了很多项,并且有固定的结构。
KeyLength和ValueLength:两个固定的长度,分别代表Key和Value的长度Key部分:Row Length是固定长度的数值,表示RowKey的长度,Row 就是Ro wKeyColumn Family Length是固定长度的数值,表示Family的长度接着就是Column Family,再接着是Qualifier,然后是两个固定长度的数值,表示Time Stamp和Key Type(Put/Delete)Value部分没有这么复杂的结构,就是纯粹的二进制数据HLog FileHLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是H LogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括sequence number和timestamp,timestamp是“写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。
HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的Ke yValue结束语:这篇文章是我专门在网上弄下来的,算是hbase部分的终极篇吧,我的服务端的源码系列也要基于这个顺序来开展。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~一、HBASE 简介HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Goo gle论文"Bigtable:一个结构化数据的分布式存储系统"。
就像Bigtable利用了Google 文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。
HBase是Apache的Hadoop项目的子项目。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
另一个不同的是HBase基于列的而不是基于行的模式。
hbase是bigtable的开源山寨版本。
是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。
主要用来存储非结构化和半结构化的松散数据。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
HBase中的表一般有这样的特点:1 大:一个表可以有上亿行,上百万列2 面向列:面向列(族)的存储和权限控制,列(族)独立检索。
3 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
二、逻辑视图Row Key与nosql数据库们一样,row key是用来检索记录的主键。
访问hbase table中的行,只有三种方式:1 通过单个row key访问2 通过row key的range3 全表扫描Row key行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。
存储时,数据按照Row key的字典序(byte order)排序存储。
设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。
(位置相关性)注意:字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91, 92,93,94,95,96,97,98,99。
要保持整形的自然序,行键必须用0作左填充。
行的一次读写是原子操作 (不论一次读写多少列)。
这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。
列族hbase表中的每个列,都归属与某个列族。
列族是表的chema的一部分(而列不是),必须在使用表之前定义。
列名都以列族作为前缀。
例如courses:history , courses:math 都属于 courses这个列族。
访问控制、磁盘和内存的使用统计都是在列族层面进行的。
实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。
时间戳HBase中通过row和columns确定的为一个存贮单元称为cell。
每个 cell都保存着同一份数据的多个版本。
版本通过时间戳来索引。
时间戳的类型是 64位整型。
时间戳可以由h base(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。