HBase的介绍
HBase 是 BigTable 的开源(源码使用 Java 编写)版本。是 Apache Hadoop 的数据库,是建立在 HDFS 之上,被设计用来提供高可靠性、高性能、列存储、可伸缩、多版本的 NoSQL 的分布式数据存储系统,实现对大型数据的实时、随机的读写访问。
- HBase 依赖于 HDFS 做底层的数据存储
- HBase 依赖于 MapReduce 做数据计算
- HBase 依赖于 ZooKeeper 做服务协调
HBase表的特点
- 大:一个表可以有上十亿行,上百万列。
- 面向列:面向列(族)的存储和权限控制,列(簇)独立检索。
- 稀疏:主要用来存储结构化和半结构化的松散数据,对于为空的列,并不占用存储空间(底层所有数据的存储都是字节数组)。
- 无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列。
HBase与hive的相同和不同
相同
hbase与hive都是架构在hadoop之上的,都是用HDFS作为底层存储。
不同
- Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。总的来说,hive是适用于离线数据的批处理,hbase是适用于实时数据的处理。
- Hive本身不存储和计算数据,它完全依赖于HDFS存储数据和MapReduce处理数据,Hive中的表纯逻辑。
- hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
- 由于HDFS的不可随机读写,hive是不支持随机写操作,而hbase支持随机写入操作。
- HBase只支持简单的键查询,不支持复杂的条件查询
HBase的优缺点
优点
- 容量巨大:HBase的单表可以支持千亿行、百万列的数据规模,数据容量可以达到TB甚至PB级别。
- 良好的可扩展性:HBase集群可以非常方便地实现集群容量扩展,主要包括数据存储节点扩展以及读写服务节点扩展。可以通过简单的增加RegionServer节点实现计算层的扩展。
- 稀疏性:HBase支持大量稀疏存储,即允许大量列值为空,并不占用任何存储空间。
- 多版本:HBase支持多版本特性,即一个 KV 可以同时保留多个版本,用户可以根据需要选择最新版本或者某个历史版本。
- 支持过期:HBase支持TTL过期特性,用户只需要设置过期时间,超过TTL的数据就会被自动清理,不需要用户写程序手动删除。
- 高可靠性:WAL预写式日志(write-ahead log)机制保证了数据写入时不会因集群异常而导致写入数据丢失,Replication机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。而且Hbase底层使用HDFS,HDFS本身也有备份。
- 高性能:底层的LSM数据结构和Rowkey有序排列等架构上的独特设计,使得Hbase具有非常高的写入性能。region切分,主键索引和缓存机制使得Hbase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能到达到毫秒级别。
缺点