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称为行键】的为一行,其实对应表格中的多行
① 行式存储倾向于结构固定,列式存储倾向于结构弱化。 ② 行式存储一行数据只需一份主键,列式存储一行数据需要多份主键。 ③ 行式存储存的都是业务数据,列式存储除了业务数据外,还要存储列名即需要在表格中显示显现列族和列修饰符。 ④ 行式存储更像一个Java Bean,所有字段都提前定义好,且不能改变; 列式存储更像一个Map,不提前定义,随意往里添加key/value需要提前定义好列族和列修饰符 1:列族和列修饰符。 需要提前定义好。面向行中的列近似于面向列中的列族:列修饰符。 从下图可以看到,列族:列修饰符是按照行进行排列的 2:行键 可以看到,行键类似于面向行的主键,即说明这些信息都是属于同一对象
3:时间戳 这个时间戳可以作为版本号来使用。相当于如对数据进行更改,面向列的存储不会对原数据进行删除或者修改,而是增加一行数据,并标上新的时间戳相同列族:列修饰符的数据是按照时间戳倒排,即最新的在最前面 此时去查询获取的是新数据,仿佛是更新了,但其实只是默认返回了最新版本的数据而已 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
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中进行恢复。
