Hbase系列学习(一)
最近实习接触到Hbase,因此想将这个学习过程记录下来,直接开题。
- Hbase介绍
- Hbase及其集群部署
- Hbase的Shell命令
- Hbase的JavaAPI
- Hbase的集群特征,监控工具
- Hbase的运行原理
- Hbase常用操作详解
- Hbase优化
Hbase介绍
- Hbase概念
Hbase是一个非关系型的、持久的、分布式的、强一致性的存储结构;
Hbase是Hadoop生态系统的一部分,Hbase数据最终是存储到HDFS文件系统当中;
Hbase是基于列存储的数据库,具有负载均衡和故障恢复功能,同时可以自动扩展,具有高效的读写功能。
//整体架构,独特的特点,怎么存,怎么取。存储格式。
(1)对于定义当中的几个名词的解释:
- 非关系型的:存储的数据格式是非结构化的数据
- 持久的:数据是存放到磁盘(Hbase是存储在基于HDFS文件系统的文件里面),而不是存于内存
- 分布式的:主要是关系型数据库做对比,不是仅有一个服务器,数据存储的方式是分布式的,数据是分布在多台服务器;
- 强一致性:
一致性查到的概念如下:保证数据库客户端操作的正确性,数据库必须保持每一步操作都是从一个一致的状态到下一个一致的状态。
一致性又分为很多级别,强一致性的概念是数据的变化是原子的,一经改变立即生效。
我的理解是放到高并发的场景,数据的状态的固定的,根据高并发的采取的措施的不同有不同的效果,而出现了不同级别的一致性特征。
(2)Hbase在Hadoop生态系统当中结构图如下:
1) HDFS为Hbase 提供了文件存储支持,Hbase最终的数据是存储在HDFS文件系统当中;
2) HBase是Hadoop 数据库,存储了海量数据;
3) MapReduce 提供分析、处理数据的能力;
4) Zookeeper 提供了对稳定的服务和failover机制(对Hbase来说主要是为Master服务器管理Region)
5) Sqoop可以将关系型数据库导入到Hbase里面
6) Hbaes底层是用Java语言实现,Pig和Hive可以提供其他语言的支持,是操作数据更加的方便。
(3) 列式存储的概念
列式存储是以列为单位聚合数据,然后将列值顺序地存入磁盘;与此相对应的是行式存储,行式存储我们脑海当中有一定的印象,列式存储可以形象的理解为矩阵转置。
列式存储自带的优势: 1.方便压缩 2.减少I/O
2. Hbase的表结构
在Mysql当中表结构:一张表,多个属性值(列),每一行有一个主键,剩下的则是列的属性值;
Hbase当中表结构:一张表,有很多行,每一行有很多列,多个列构成了列簇,每个列的数据会有对应的时间戳;
上图的排序操作是以字典序排序
具体数据结构可以如下:
Table>RowKey(行健)>FamilyName(列簇)>Column(列)-Timestamp-Value
关于列簇:
Hbase在创建一个表的时候,必须创建列簇;
一个表当中的列簇在表创建的时候就定义好,且表中的列族的数量不能太多(只限于几十);
一个列簇是由多个列组成,一个列簇的所有列存储在同一个底层的文件当中,这个存储文件叫做HFile;
一个列簇当中的列的数量不受限制,可以是几个,也可以是几百万个,其中列是没有类型,和长度限定的。
3.关于自动扩展
Hbase中扩展和负载均衡的基本单位是region,region在物理层上理解就是一块连续的存储空间。当表创建的时候只有一个region,随着用户
加入的数据逐渐增多,region的大小达到的最大限制,region就从中间开始的rowKey【注意是rowKey】分裂,拆分成两个大致相等的字region;
有了region那就需要有管理region的单位,就是regionServer;
RegionServer可以管理多个Region,但一个region只能有RegionServer来管理。
Region的内部结构:
其中StoreFile就是上文提到的Hfile。
4. Hbase的读写流程
写流程:
1.根据块索引找到,找到对应rowkey所在的块
2.更新数据的时候,首先先将数据记录在提交日志,Hbase当中叫做预写日志(WAL);
3.将数据写入memStore(在内存当中),当memsTore超过限定值,将数据移除内存作为Hfile即StoreFile刷写到磁盘.
4.随着region里面Hfile文件越来越多,会将同一个键值得Hfile合并为一个大的Hfile文件。
5.在合并的过程当中,有两种合并方式:有一个是直接合并,另一种是将有删除标记的数据删除。
5.Hbase的组成结构
Hbase中主要有3个组件,客户端库(Shell,JavaAPI),一台主服务器(Master),多台Region服务器
主服务器利用ZooKeeper为Region服务器分配Region。
其中RegionServer向Zookeeper注册一个自己的临时会话点,主服务器Master利用这些临时会话点
发现可用服务器。
每一个临时会话点会生成一个id,客户端会以此id向zookeeper发送心跳证明自己存活。
Master负责维护所有RegionServer的负载均衡,不提供任何服务。
RegionServer负责region的读写请求,客户端直接与RegionServer通信。
6.一些混淆的概念
一个RegionServer有多个Region
一个Table会有多个Region,一个Region包含Table的一部分(Region中有多个RowKey)
每一个Table的列族对应一个Store文件
每一个Store文件包含多个StoreFile和一个MemStore
StoreFile对应存储文件HFile