要学习Hbase了,工欲善其事必先利其器,要真正在学习的时候看懂每一步操作,必须先把理论知识先过一遍,总结了一点Hbase的网络知识。
Hbase简介Hbase 是构建在HDFS上的分布式列存储数据库,是一个高可靠性、高性能、面向列、客伸缩的分布式存储系统,利用Hbase技术可以再廉价PC sever上 搭建大规模结构化存储集群。
Hbase 是Google Bigtable 的开源实现,类似Google Bigtable 利用GFS 作为其我呢见存储系统,Google 运行Mapreduce 来说处理Bigtable 中的海量数据,Hbase 同样利用Hadoop Mapreduce 来处理 Hbase 中的海量数据;Google Bigdata利用 Chubby 作为协同服务,Hbase利用 Zookeeper作为协同服务。
Hbase生态圈
Hbase 利用HDFS 分布式文件系统存储数据,确保HDFS是ok的,先搭建HDFS再搭建Hbase。海量存储与高并发操作就是要利用Hbase。
Hbase的特点与传统数据库相比,Hbase具有如下特点:
- 大:单表可以数十亿行,数百万列(上TB级别的数据,底层采用分布式存储,从下往上解决存储,在想我的电脑才两个TB,每个虚拟机都才分配了20gb,看来到时候要租服务器玩了)无模式:同一个表的不同行可以有截然不同的列(传统数据库有字段,空着也在占空间,Hbase空着的不占空间,每一行的列数都可以不一样)面向列:存储、权限控制、检索均面向列(按列存储,同一类型的数据一个文件可以方便压缩,降低I/O,加快读取速度,Hbase的优势)稀疏:空列不占用存储,表是稀疏的多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳(每个单元格按不同时间插入可不同版本)数据类型单一:数据都是字符串,没有类型(插入前转换成类型单一的字符串,读取的时候再转换回去)
第一列 Row Key 主键
第二列 version 版本
第三列 ColumnFamily 列簇1
第四列 ColumnFamily 列簇2
1.表在Hbase 中数据是以表的形式存储的,通过表可以将某些列放在一起访问,同一个表中的数据通常是相关的,可以通过列簇进一步放在一起进行访问。用户可以通过命令行(shell)或者Java API 来创建,创建表时只需要指定表名和至少一个列簇。
Hbase的列式存储结构允许用户存储海量的数据到相同的表中,而在传统数据库中,海量数据需要被切分成多个表进行存储。
2.行键(Row Key)
RowKey既是Hbase表的行键,也是Hbase表的主键。Hbase表中的记录是按照Rowkey的字典顺序进行存储。
在Hbase中,为了高效地检索数据,需要设计良好地Rowkey来提高查询性能。首先,Rowkey被冗余存储,所以长度不宜过长,Rowkey过长见会占用大量地存储空间同时会降低检索效率:其次RowKey应该尽量均匀分布,避免产生热点问题(Hbase可划分成很多regions,最好分散均匀,保证负载均衡);另外需要保证Rowkey的唯一性。
3.列簇(ColumnFamily)
Hbase表中的每个列都归属于某个列簇,一个列簇中的所有列成员有着相同的前缀。比如,列url和host都 是列簇RI的成员。列簇是表的schema的一部分,必须在使用表之前定义列簇,但列却不是必须的,写数据的时候可以动态加入。一般将经常一起查询的列放在一个列簇中,合理划分列簇将减少查询时加载到缓存的数据,减少I/O,提高查询效率,但也不能有太多的列簇,因为跨列簇访问是非常低效的。
Hbase中通过Row和Column确定的一个存储单元称为单元格(Cell)。每个单元格都保存着同一份数据的多个版本,不同时间版本的数据按照时间顺序倒序排序,最新时间的数据排在最前面。
为了避免数据存在过多版本造成的管理代包括存储和索引)负担,Hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本;二是保存最近一段时间内的数据版本,比如最近七天。用户可以针对每个列族进行设置。
每个列簇存储zaiHDFS上的一个单独文件里RowKey和version在每一个列簇里均有一份空值不保存,占位符都没有
明天再写呜呼呼
Hbase系统架构



