hbase-列存储动态数据库
1) hbase是什么?
hbase是建立在hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。
hbase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了hadoop的文件系统(hdfs)提供的容错能力。
它是hadoop的生态系统,提供对数据的随机实时读/写访问,是hadoop文件系统的一部分。
人们可以直接或通过hbase的存储hdfs数据。使用hbase在hdfs读取消费/随机访问数据。 hbase在hadoop的文件系统之上,并提供了读写访问。
2) hbase的存储机制
hbase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。
总之,在一个hbase:表是行的集合à行是列族的集合à列族是列的集合à列是键值对的集合,如图:
3) hbase的特点
- 建立在hdfs之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式列存储的动态模式数据库,列式数据库(nosql)专门解决hadoop不擅长的工作。
- 采用bigtable的数据模型。增强的稀疏排序映射表(key/value),其中“键”是由行关键字、列关键字、时间截构成。
- 提供对大规模数据的随机、实时读写访问功能,其保存的数据可通过mapreduce处理。
4) 行数据库与列数据库的区别
5) hbase表特点:
- 表比较大,一个表有数十亿行,上百万列;
- 无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要冬天的增加,同一张表中的行也已有截然不同的列;
- 稀疏:空值列并不占用存储空间,列独立检索;
- 数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时间戳;
- 数据类型单一:数据都是字符串,没有类型
6) 存储核心—hstore
hstore分为menstore和storefiles两部分。
用户写入的数据首先会放入memstore,当memstore满了以后会flush成一个storefile(底层实现是hfile),当storefile文件数量增长到一定阈值,会触发compact合并操作,将多个storefiles合并成一个storefile,合并过程中会进行版本合并和数据删除
hbase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了hbase i/o的高性能架构。
7) hbase架构
一个hmaster(管理服务器)控制多个region server(数据服务器);
- hmater负责表的创建、删除、维护以及region的分配和负载均衡;
- region server负责管理维护region以及响应读写请求;
- 客户端与hmaster进行有关表的元数据操作,之后直接读写region servers。
master职责:
1. 为regionserver分配region;
2. 负责regionserver的负载均衡;
3. 垃圾文件回收;
4. 处理schema请求
zookeeper职责:
- 保证集群只有一个master;
- 监控region server状态,实时通知master;
- hbase目录入口地址;
- hbase的schema信息
region职责:
- 对数据的读写支持;
- 对region管理的支持;
- hbase目录入口地址;
- hbase的schema信息
8) hbase 和 hdfs关系
9) hive与hbase区别
相同点:都是架构在hadoop之上,都是用hadoop作为底层存储
不同点:
hive:
- 是批处理系统,目的是检索mapreduce jobs的编写工作;
- 是纯逻辑表并且是全表扫描,本身不存储和计算数据,完全依赖hdfs和mapreduce;
- 时效性低
hbase:
- 是实时操作系统,目的是弥补hadoop的缺陷项目;
- 是物理表,采用列存储索引数据或实时数据,提供超大的内存hash表;
- 高时效性。