作者:尛妙苗_549 | 来源:互联网 | 2023-09-06 15:09
HbaseHdfs缺点不能并发写入不能随机读写不能随机删除高延迟不适合存储大量小的文件RDBMS缺点分区加上主从复制,方案比较复杂分区不支持动态扩展依赖于IBM,E
Hbase
Hdfs缺点
不能并发写入
不能随机读写
不能随机删除
高延迟
不适合存储大量小的文件
RDBMS缺点
分区加上主从复制,方案比较复杂
分区不支持动态扩展
依赖于IBM,EMC等公司设备,造价高
容错性低,查询重启
基于上述原因,出现了HBase
Hadoop存在两种数据存储的方式
Hdfs的文件存储方式
Hbase分布式数据库存储的方式
HBASE支持实时读写大数据,它是一个高可靠性,高性能,可伸缩的分布式存储系统
HBase是一个构建在HDFS上的分布式noSQL数据库
HBase是基于google bigtable模型开发,典型的key/value系统
具有松散的表结构,原生海量数据分布式存储;支持随机查询,范围查询
高吞吐,低延迟
列存储,多版本,增量导入,多维删除
Hbase与关系型数据库不同在于
- 允许数据冗余
- 允许列动态增加
HDFS vs HBASE
HBase上数据是以storeFile(HFile)二进制流的形式存储在HDFS上block块中
HDFS并不知道hbase存的是什么,它只把存储文件视为二进制文件,即hbase存储数据对于HDFS文件系统是透明的
HBASE特性
大:一个表可有数十亿行,上百万列
无模式:每行都有一个可排序的主键和任意多的列,列可根据需要动态的增加,同一张表中不同的行可有截然不同的列
面向列:面向列(族)的存储和权限控制,列(族)独立检索
稀疏,多维,排序的map:空(null)列不占用存储空间,表可以设计的非常稀疏;每个单元中数据可有多个版本,默认下版本号自动分配,是单元格插入时的时间戳
数据类型单一:HBASE数据都是字符串,没有类型
强一致性读写:HBASE不是最终一致性数据存储,它适合高速技术聚合类任务
自动分片:HBASE表通过region分布在集群中,数据增长时,region会自动分割并重新分布
RegionServer自动故障转移和负载均衡
MapReduce: HBASE通过mapreduce支持大并发处理
实时,随机地大数据访问;HBASE内部使用LSM-tree作为数据存储架构,LSM-tree周期性合并小文件到较大文件,来减少硬盘寻址
Java客户端API:HBASE支持易于使用地java API进行编程访问
Thrift/RESET API:HBASE也支持Thrift和REST作为非java前端的访问
Block Cache和bloom filter:对于大容量查询优化,HBASE支持block cache和bloom filter
快照支持
HBASE特性
数据自动分区
HBASE使用LSM树(log structured merge tree)
随机写->顺序写 (HBASE写起来特别快)
HBASE生态
- Kylin是一个多维的数据仓库,先对hbase进行建模并存在hbase中,之后从kylin来查询写好的模型
-
HBASE是面向列的存储
HBASE应用场景
数据量较大,而且增长量无法预估的应用
写密集型应用
查询场景简单,检索条件较少,不需要复杂查询条件来查询数据应用
对性能和可靠性要求非常高的应用,由于hbase本身没有单点故障,可用性非常高
HBASE基本解决三大类场景
平台类:作为平台的底层存储使用,如kylin,阿里内部的日志同步工具TT,图组件Titan
用户行为类:主要是面向各个业务系统,如淘宝收藏夹,交易数据,旺旺聊天
报表展示类:实时响应,如报表,大屏等
HBASE逻辑模型
数据存储在表中,表具有行和列
Rowkey: 行键,唯一地标识一行记录,且自动进行排序
按字典排序地升序索引
定位单元格:rowKey->columnName->version
HBASE表和分区
表由任意数量地分区组成
分区由其startKey和endKey组成
- 空表:(table, null, null)
- 两个分区地表:(table,null,’M’)和(table,’M’,NULL)
每个分区有可能驻留在不同节点,由多个HDFS文件和块组成
HBASE中,记录以key-value对的形式存储在HFILE中,HFile再以block块的形式存到HDFS中
HFILE是作为二进制文件存储
当MemStore中的数据被flush到磁盘中时,就创建了HFile
HBASE的核心数据结构就是map
简单说,map就是key-value对集合
HBASE中map是按照row key以字母顺序排序
可将hbase中的表视为key-value表