HBase总结

2019-01-27

通过前面对HBase各方面的介绍后,此处对HBase进行总结,主要涉及HBase与Hive的对比、HBase与传统数据库的对比以及HBase的应用场景等方面。

1 HBase和Hive的区别

  • Hbase 是数据库,是有实体表的,列式存储,基于Nosql方式查询
  • Hive 的目的不是存储或查询,可以认为它本身就没有实体表,只是HDFS上是结构化文件的视图。Hive 一般用于ETL,Hive的SQL本身就可以转化为MapReduce。所以使用Hive目的,就是方便实现MapReduce程序来做一些ETL的工作。

HBase和Hive在大数据架构中处在不同位置,HBase主要解决实时数据查询问题Hive主要解决数据处理和计算问题,一般是配合使用。

Hbase: Hadoop database 的简称,也就是基于Hadoop数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。

Hive:Hive是Hadoop数据仓库,严格来说,不是数据库,主要是让开发人员能够通过SQL来计算和处理HDFS上的结构化数据,适用于离线的批量数据计算。主要提供以下功能:它提供了一系列的工具,可用来对数据进行提取/转化/加载(ETL);是一种可以存储、查询和分析存储在HDFS(或者HBase)中的大规模数据的机制;

  • 不支持事务
  • 不能对表数据进行修改(不能更新、删除、插入;只能通过文件追加数据、重新导入数据);
  • 不能对列建立索引(但是Hive支持索引的建立,只是不能提高Hive的查询速度。如果你想提高Hive的查询速度,请学习Hive的分区、桶的应用)。

参见HBase 和 Hive 的差别是什么,各自适用在什么场景中?

2 HBase优缺点

Hbase的优点:

  1. 列的可以动态增加,并且列为空就不存储数据,节省存储空间.
  2. Hbase自动切分数据,使得数据存储自动具有水平scalability.
  3. Hbase可以提供高并发读写操作的支持

Hbase的缺点:

  1. 不能支持条件查询,只支持按照Row key来查询.
  2. 不适合于大范围扫描查询
  3. 不支持事务
  4. 不直接支持 SQL 的语句查询

3 NoSQL和关系数据库的区别

非关系型数据库的优势:

  1. 性能:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
  2. 可扩展性:同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

关系型数据库的优势:

  1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
  2. 事务支持使得对于安全性能很高的数据访问要求得以实现。

4 HBase和传统数据库的区别

维度 | HBase | RDBMS —|—|— 硬件架构 | 类似于 Hadoop 的分布式集群,硬件成本低廉 | 传统的多核系统,硬件成本昂贵 容错性 | 由软件架构实现,由于由多个节点组成,所以不担心一点或几点宕机 | 一般需要额外硬件设备实现 HA 机制 数据库大小 | PB | GB、TB 数据排布方式 | 稀疏的、分布的多维的 Map | 以行和列组织 数据类型 | Bytes | 丰富的数据类型 事物支持 | ACID 只支持单个 Row 级别 | 全面的 ACID 支持,对 Row 和表 查询语言 | 只支持 Java API (除非与其他框架一起使用,如 Phoenix、Hive) | SQL 索引 | 只支持 Row-key,除非与其他技术一起应用,如 Phoenix、Hive | 支持 吞吐量 | 百万查询/每秒 | 数千查询/每秒

5 HBase的应用场景

hbase适合大量随机写入和顺序读取的应用场景,不适合大量随机读的应用场景。

  1. 写密集型应用,每天写入量巨大,而相对读数量较小的应用,比如IM的历史消息,游戏的日志等等
  2. 不需要复杂查询条件来查询数据的应用,HBase只支持基于rowkey的查询,对于HBase来说,单条记录或者小范围的查询是可以接受的,大范围的查询由于分布式的原因,可能在性能上有点影响,而对于像SQL的join等查询,HBase无法支持。
  3. 对性能和可靠性要求非常高的应用,由于HBase本身没有单点故障,可用性非常高。
  4. 数据量较大,而且增长量无法预估的应用,HBase支持在线扩展,即使在一段时间内数据量呈井喷式增长,也可以通过HBase横向扩展来满足功能。