大数据存储与处理——HBase

HBase作为Google Bigtable的开源实现,Google Bigtable利用GFS作为其文件存储系统类似,则HBase利用Hadoop HDFS作为其文件存储系统;Google通过运行MapReduce来处理Bigtable中的海量数据,同样,HBase利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby作为协同服务,HBase利用Zookeeper作为对应。
相当于bigtable,hbase一级,gfs和hdfs一级,Chubby和zookeeper一级
回忆一下:
gfs:master,client,chunkserver
hdfs:namenode ,client ,datanode

面向列的存储

传统意义上面向行的存储:
大数据存储与处理——HBase
我们可以发现,有很多冗余的部分,比如赵六本科,硕士,清华就没有,浪费空间
新型的关系型数据库,面向列的
大数据存储与处理——HBase
首先明确行式中的行和列式中的行不一样,但本质上都是相同主键/行键为一行,但不对应表格中的一行。
行式中:表格中的一行就是一行
列式中:相同主键【Hbase称为行键】的为一行,其实对应表格中的多行

① 行式存储倾向于结构固定,列式存储倾向于结构弱化。
② 行式存储一行数据只需一份主键,列式存储一行数据需要多份主键。
③ 行式存储存的都是业务数据,列式存储除了业务数据外,还要存储列名即需要在表格中显示显现列族和列修饰符
④ 行式存储更像一个Java Bean,所有字段都提前定义好,且不能改变;
列式存储更像一个Map,不提前定义,随意往里添加key/value需要提前定义好列族和列修饰符
1:列族和列修饰符。
需要提前定义好。面向行中的列近似于面向列中的列族:列修饰符。
从下图可以看到,列族:列修饰符是按照行进行排列的
大数据存储与处理——HBase
2:行键
可以看到,行键类似于面向行的主键,即说明这些信息都是属于同一对象
大数据存储与处理——HBase

3:时间戳
这个时间戳可以作为版本号来使用。相当于如对数据进行更改,面向列的存储不会对原数据进行删除或者修改,而是增加一行数据,并标上新的时间戳相同列族:列修饰符的数据是按照时间戳倒排,即最新的在最前面
此时去查询获取的是新数据,仿佛是更新了,但其实只是默认返回了最新版本的数据而已
大数据存储与处理——HBase
4:单元格cell和行row
上图中的每一行就相当于一个Cell,这里的行键、列族、列修饰符和时间戳其实可以看作是定位属性(类似坐标),最终确定了一个数据
比如说:1001 bi:name 张三 t1 就为一个Cell
而相同的行键构成一行(Row)
比如说:所有行键为1001的构成一行

这里要注意的是,将面向列与面向行进行类比实质是不准的
本质上讲,Hbase的是一个三维Map(Map套Map)。列族是第一维,列修饰符是第二维,时间戳是第三维
学生表{
//一行
“张三”: { //行键
“毕业学校:本科” : { //列族:列修饰符
15 : “清华大学”, //最新的版本,如果对其检索则返回此版本
4 : “北京大学”//早版本 ,如果对其检索不会返回此版本
},
“毕业学校:硕士” : { //列族:列修饰符
15 : “清华大学”,
},
“工作经验:公司1” : { //列族:列修饰符
6 : “微软”
}
“工作经验:公司2”{//列族:列修饰符
10:“腾讯”
}
},
“李四”: { //行键
“毕业学校:本科” : { //列族:列修饰符
15 : “复旦大学”, //最新的版本,如果对其检索则返回此版本
},
“毕业学校:硕士” : { //列族:列修饰符
15 : “北京大学”,
},
“工作经验:公司1” : { //列族:列修饰符
10:“腾讯”
6 : “阿里巴巴”
}
},
}1001{ bi{},ei{},wi{}}

引用:https://www.jianshu.com/p/c4e3d847f529

HBase架构

Client:包含访问HBase的接口,并维护cache来加快对HBase的访问。

Zookeeper:HBase依赖Zookeeper,默认情况下HBase管理Zookeeper实例(启动或关闭Zookeeper),Master与RegionServers启动时会向Zookeeper注册。Zookeeper的作用如下:
保证任何时候,集群中只有一个master
存储所有Region的寻址入口
实时监控Region server的上线和下线信息。并实时通知给master
存储HBase的schema和table元数据

HRegionServer:维护master分配给他的region

HRegion:HBase表在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元。Region按大小分隔,每个表一般是只有一个region,当region的某个列族达到一个阈值(默认256M)时就会分成两个新的region。

Store:每一个Region由一个或多个Store组成.每个ColumnFamily建一个Store,如果有几个ColumnFamily,也就有几个Store。

StoreFile:memStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。

HLog:HLog记录数据的所有变更,可以用来恢复文件,一旦region server 宕机,就可以从log中进行恢复。
大数据存储与处理——HBase