HBase
1、 HBase基本介绍
简介
hbase是bigtable的开源java版本。是建立在hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写nosql的数据库系统。
它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。
主要用来存储结构化和半结构化的松散数据。
Hbase查询数据功能很简单,不支持join等复杂操作,不支持复杂的事务(行级的事务)
Hbase中支持的数据类型:byte[]
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
HBase中的表一般有这样的特点:
大:一个表可以有上十亿行,上百万列
面向列:面向列(族)的存储和权限控制,列(族)独立检索。
稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
2、HBase与Hadoop的关系
1、HDFS
- 为分布式存储提供文件系统
- 针对存储大尺寸的文件进行优化,不需要对HDFS上的文件进行随机读写
- 直接使用文件
- 数据模型不灵活
- 使用文件系统和处理框架
- 优化一次写入,多次读取的方式
2、HBase - 提供表状的面向列的数据存储
- 针对表状数据的随机读写进行优化
- 使用key-value操作数据
- 提供灵活的数据模型
- 使用表状存储,支持MapReduce,依赖HDFS
- 优化了多次读,以及多次写
3、RDBMS与HBase的对比
1、关系型数据库
结构:
- 数据库以表的形式存在
- 支持FAT、NTFS、EXT、文件系统
- 使用Commit log存储日志
- 参考系统是坐标系统
- 使用主键(PK)
- 支持分区
- 使用行、列、单元格
功能: - 支持向上扩展
- 使用SQL查询
- 面向行,即每一行都是一个连续单元
- 数据总量依赖于服务器配置
- 具有ACID支持(事务具有4个特征,分别是原子性、一致性、隔离性和持久性,简称事务的ACID特性;)
- 适合结构化数据
- 传统关系型数据库一般都是中心化的
- 支持事务
- 支持Join
2、HBase
结构: - 数据库以region的形式存在
- 支持HDFS文件系统
- 使用WAL(Write-Ahead Logs)(预写日志)存储日志
- 参考系统是Zookeeper
- 使用行键(row key)
- 支持分片
- 使用行、列、列族和单元格
功能: - 支持向外扩展
- 使用API和MapReduce来访问HBase表数据
- 面向列,即每一列都是一个连续的单元
- 数据总量不依赖具体某台机器,而取决于机器数量
- HBase不支持ACID(Atomicity、Consistency、Isolation、Durability)
- 适合结构化数据和非结构化数据
- 一般都是分布式的
- HBase不支持事务 支持单行事务的操作,不支持多行事务的操作
- 不支持Join
4、HBase特征简要
1、自动故障处理和负载均衡
HBase运行在HDFS上,所以HBase中的数据以多副本形式存放,数据也服从分布式存放,数据的恢复也可以得到保障。另外,HMaster和RegionServer也是多副本的。
2、自动分区
HBase表是由分布在多个RegionServer中的region组成的,这些RegionServer又分布在不同的DataNode上,如果一个region增长到了一个阈值,为了负载均衡和减少IO,HBase可以自动或手动干预的将region切分为更小的region,也称之为subregion。
3、集成Hadoop/HDFS
虽然HBase也可以运行在其他的分布式文件系统之上,但是与HDFS结合非常之方便,而且HDFS也非常之流行。
4、实时随机大数据访问
HBase采用log-structured merge-tree作为内部数据存储架构,这种架构会周期性地将小文件合并成大文件以减少磁盘访问同时减少NameNode压力。
5、MapReduce
HBase内建支持MapReduce框架,更加方便快速,并行的处理数据。
6、Java API
HBase提供原声的Java API支持,方便开发。
7、横向扩展
HBase支持横向扩展,这就意味着如果现有服务器硬件性能出现瓶颈,不需要停掉现有集群提升硬件配置,而只需要在现有的正在运行的集群中添加新的机器节点即可,而且新的RegionServer一旦建立完毕,集群会开始重新调整。
8、列存储
HBase是面向列存储的,每个列都单独存储,所以在HBase中列是连续存储的,而行不是。
9、HBase Shell
HBase提供了交互式命令行工具可以进行创建表、添加数据、扫描数据、删除数据等操作和其他一些管理命令。