一 ,概况 :
1 ,百度百科 :
- 是什么 : HBase是一个分布式的、面向列的开源数据库
- bigtable :该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。
- 依托 hdfs 就像 Bigtable 利用了 Google 文件系统(File System)所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。
- 所属单位 : HBase 是 Apache 的 Hadoop 项目的子项目。
- 非结构化数据存储 : HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
- 基于列 : 另一个不同的是 HBase 基于列的而不是基于行的模式。
2 ,天时地利 : 很多组件,都可以被 hbase 使用 :
- HBase 位于结构化存储层
- Hadoop HDFS 为 HBase 提供了高可靠性的底层存储支持。
- Hadoop MapReduce 为 HBase 提供了高性能的计算能力
- Zookeeper 为 HBase 提供了稳定服务和 failover 机制。
- Pig 和 Hive 还为 HBase 提供了高层语言支持,使得在 HBase 上进行数据统计处理变的非常简单。
- Sqoop 则为 HBase 提供了方便的 RDBMS 数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

讯享网
3 ,访问接口 : 怎么操作 hbase
- Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据
- HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用
- Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问 HBase 表数据
- REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制
- Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计
- Hive,当前 Hive 的 Release 版本尚没有加入对 HBase 的支持,但在下一个版本 Hive 0.7.0中将会支持 HBase,可以使用类似 SQL 语言来访问 HBase 。
4 ,表构成 :行键,时间戳,列簇
- Row Key: 行键,Table的主键,Table中的记录默认按照Row Key升序排序
- Timestamp:时间戳,每次数据操作对应的时间戳,可以看作是数据的version number
- Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。
5 ,表数据 : Table & Region ( 表和区域 )
- 当 Table 随着记录数不断增加而变大后,会逐渐分裂成多份 splits ,成为 regions.
- 一个 region 由 [startkey,endkey] 表示.
- 不同的 region 会被 Master 分配给相应的 RegionServer 进行管理
6 ,-ROOT- & .META. : 元数据信息 ( 分区 )
- HBase 中有两张特殊的 Table,-ROOT- 和 .META.
- -ROOT- :记录了 .META. 表的 Region 信息,-ROOT- 只有一个 region
- .META. :记录了用户表的 Region 信息,.META. 可以有多个 region
- Zookeeper 中记录了-ROOT- 表的 location
- 如图 : region 信息的保存 (分区信息 )

7 ,访问数据的底层实现流程
Client 访问用户数据之前需要首先访问 zookeeper,然后访问 -ROOT- 表,接着访问 .META. 表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过 client 端会做 cache 缓存。

8 ,MapReduce on HBase :
- 在 HBase 系统上运行批处理运算,最方便和实用的模型依然是 MapReduce
- HBase Table和Region的关系,比较类似HDFS File和Block的关系
二 ,总结 :
1 ,实时 :
hbase 的查询操作 : 准实时 ( 百毫秒 )
2 ,非结构化数据 :
- hbase 首先它是个结构化数据存储系统,
- 其次才是它还具有强大的非结构化数据的存储能力。
3 ,hbase 特点 :
- 海量存储 :
Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展**息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。 - 列式存储 : ( 表结构面向列 )
这里的列式存储其实说的是列族存储,Hbase 是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。 - 极易扩展
Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。
备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。 - 高并发
由于目前大部分使用Hbase的架构,都是采用的廉价 PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase 的单个IO延迟下降并不多。能获得高并发、低延迟的服务。 - 稀疏 ( 没有数据的话,就不存,不占空间,不是 null ,也没有默认值 )
稀疏主要是针对 Hbase 列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
4 ,hbase 适用场景 :
- 数据量很大 ( 千万条数据以上 )。
- 准实时。
- 期待的效果,达到跟普通关系型数据库一样的速度。
- 关系型数据库的极限 ( 500 万行,50 列 )。
- hbase 存储的数据 ( 十亿行,百万列 )。
5 ,HBase 架构 :文字介绍
- 组成元素 : Client、Zookeeper、Master、HRegionServer、HDFS
客户端,zk ,主服务器,分片服务器,hdfs - Client :客户端
访问 Hbase 的接口,另外 Client 还维护了对应的 cache 来加速 Hbase 的访问,比如cache 的.META.元数据的信息。 - Zookeeper : 主从节点的管理和协调
HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。具体工作如下:
通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务
通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息
通过Zoopkeeper存储元数据的统一入口地址 - Hmaster :主节点
master节点的主要职责如下:
为RegionServer分配Region
维护整个集群的负载均衡
维护集群的元数据信息
发现失效的Region,并将失效的Region分配到正常的RegionServer上
当RegionSever失效的时候,协调对应Hlog的拆分 - HregionServer :从节点
HregionServer直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下:
管理master为其分配Region
处理来自客户端的读写请求
负责和底层HDFS的交互,存储数据到HDFS
负责Region变大以后的拆分
负责Storefile的合并工作 - HDFS :底层存储
HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:
提供元数据和表数据的底层分布式存储服务
数据多副本,保证的高可靠和高可用性
6 ,HBase 架构 :架构图

7 ,HBase 架构 :各个角色介绍
- Write-Ahead logs :日志记录
HBase 的修改记录,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。 - Region :分片
Hbase 表的分片,HBase 表会根据 RowKey 值被切分成不同的 region 存储在 RegionServer 中,在一个 RegionServer 中可以有多个不同的 region。 - Store : 存储
HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列族。 - MemStore : 内存存储
顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。 - HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以Hfile的形式存储在HDFS的。
8 ,存储数据的过程 :
- table : 一张表
1 个 table,多个 region ,region 是分布式存储的最小单元。 - Region :一个分区
table 在行的方向上分隔为多个 Region。Region 是 HBase 中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的 Region Server上,但同一个Region是不会拆分到多个 server 上。
Region 按大小分隔,表中每一行只能属于一个 region 。随着数据不断插入表,region 不断增大,当region 的某个列族达到一个阈值(默认 256M)时就会分成两个新的 region。 - store :一个列族
每一个region有一个或多个store组成,至少是一个store,hbase会把一起访问的数据放在一个store里面,即为每个ColumnFamily建一个store(即有几个ColumnFamily,也就有几个Store)。一个Store由一个memStore和0或多个StoreFile组成。 - memStore :内存存储
memStore 是放在内存里的。保存修改的数据即keyValues。当memStore的大小达到一个阀值(默认64MB)时,memStore会被flush到文件,即生成一个快照。目前hbase 会有一个线程来负责memStore 的 flush 操作。 - StoreFile :一个文件 ( 一次刷新的文件 )
memStore 内存中的数据写到文件后就是 StoreFile(即 memstore 的每次 flush 操作都会生成一个新的 StoreFile),StoreFile 底层是以 HFile 的格式保存。 - HFile : 文件格式
HFile 是 HBase 中 KeyValue 数据的存储格式,是 hadoop 的二进制格式文件。一个 StoreFile 对应着一个 HFile。而 HFile 是存储在 HDFS 之上的。HFile 文件格式是基于 Google Bigtable 中的SSTable ,如下图所示:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/11787.html