目录
一.Hbase基本介绍
简介
与传统数据库对比
创建Hbase
3.1 基本结构
3.2 时间戳
3.3 行存储与列存储
3.4 keyvalue存储模型
二.Hbase功能与架构
架构介绍
region的分类
zookeeper
三.Hbase关键流程
写流程
complication
Region Split
读流程
OpenScanner
一.Hbase基本介绍
1.简介
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。
2.与传统数据库对比
传统数据库(结构化数据库):
数据结构固定。
需要预先定义好数据结构。
需要大量IO,扩展成本大。
传统数据库处理的是结构化的数据,而大数据中80%的数据都是非结构化数据。故而需要使用非结构化数据库
Hbase(非结构化数据库):
分布式存储,面向列。
列无需事先定义,可实时扩展。
普通商用硬件支持,扩容成本低。
3.创建Hbase
3.1 基本结构
HBase以表的形式存储数据。表有行和列族组成。列族划分为若干个列。其结构如下:
创建一个Hbase表需要定义:表名,列族(cf),rowkey
列族:列的集合。Hbase表中的每个列,都归属与某个列族。
rowkey:用来标识一条记录,由它来决定有几条记录。按照字典顺序进行排列,最大限制为64M。
在创建Hbase表时不需要定义列名,在插入时定义即可。这也是与传统数据库的区别
3.2 时间戳
时间戳相当于一个版本号,用来区别同一列名的记录。Hbase默认显示最新时间戳的记录。
默认时间戳为1,在更新时间戳时,第一条记录并不会立即消失,而是会等到合并时再进行删除
如何确定一个单元格的内容?
在确认某一单元格的内容时,需要知道rowkey+cf(列族)+Q(列族)。并不需要知道时间戳,因为时间戳默认显示最新的记录。
3.3 行存储与列存储
行存储:数据按行存储在底层文件系统中。通常,每一行会被分配固定的空间。
优点:有利于增加/修改整行记录等操作;有利于整行数据的读取操作。
缺点:单列查询时,会读取一些不必要的数据。
列存储:数据以列为单位,存储在底层文件系统中。
优点:有利于面向单列数据的读取/统计等操作。
缺点:整行读取时,可能需要多次I/O操作。
3.4 keyvalue存储模型
hbase本质上也是一种Key-Value存储系统。Key相当于RowKey,Value相当于列族数据的集合
key就是用来标识信息,value用来存储实际的数据
二.Hbase功能与架构
1.架构介绍
DFS Client(文件系统客户端):HBase通过DFS Client对HDFS进行信息的写入
client(客户端):申请业务
zookeeper(高可靠):主备选举(选举主备Hmaster),在HBase中还用来存储元数据(region的元数据)
HMaster:为存入的(表)数据分配空间,对hregionserver进行管理
HRegionserver:对表数据进行维护
HRegion:存储(表)数据
一张完整的表可以在多个regionserver中的多个region当中,如果一个region失效,master就会对当前region中的数据进行迁移
HDFS为HBase提供高可靠的文件存储服务,HBase的数据全部存储在HDFS中。
Store:列族
Memstore:内存(写数据先写入内存,超过限制则写入storefile(也就是hfile))
Hlog(日记):记录操作信息,数据信息,保证故障时能够恢复数据(多个region共享一个hlog)
2.region的分类
元数据region(meta
region):用来标识用户region的位置,存在zookeeper当中。
用户region(user
region)
3.zookeeper
作用:
分布锁机制:保证高可靠性,在一个分子节点对Hmaster进行主备的选举
监听:监听hmaster是否正常(相当于HDFS当中ZKFC的作用)
充当一个数据库的作用:用来存储元数据(meta region,regionserver的地址)
三.Hbase关键流程
1.写流程
client向zookeeper申请写入,hmaster分配一个写的空间
进行写入的时候,根据rowkey定位一个region(根据mata表定位在哪个regionserver中)
向regionserver申请写入
先写memstore,溢出后写入hfile
写入成功。若失败,向hmaster上报哪些数据写入失败,申请重写。
2.complication
当Hfile数据越来越大之后,要进行合并(compaction)
目的:减少同一个region当中的小文件(小文件过多对资源的分配和调度都有影响)
minor(小合并):小范围合并,有文件合并数目的限制。(不会对文件读取的性能造成影响,造成的时延等很小。默认1h自动进行合并)
major:所有的hfile进行合并。(造成一小段时间的中断,不自动触发)
合并之后的数据存入HDFS中
3.Region Split
Region Split是指集群运行期间,某一个Region的大小超出了预设的阈值(10G),则需要将该Region自动分裂成为两个子Region。
分裂之后的region也是连续的,只是在相当于中间切了一刀
这里的分裂只是逻辑上进行分裂,实际上是在新的region中引用父region的文件(类似于我们在删除文件时,并不是真正的删除,而是将文件移入回收站)
4.读流程
client向zookeeper申请读取数据
zookeeper定位region所在的regionserver。
向regionserver申请读数据
创建两种scanner读取memstore和hfile
5.OpenScanner
OpenScanner的过程中,会创建两种不同的Scanner来读取Hfile、 MemStore的数据:
HFile对应的Scanner为StoreFileScanner。
MemStore对应的Scanner为MemStoreScanner。
想了解更多IT技术,欢迎访问
腾科教育.