一、Hbase和Hive

HBase 是一种类似于数据库的存储层,也就是说 HBase 适用于结构化的存储。并且 HBase 是一种列式的分布式数据库。

HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。属于非关系型数据库。

HBase是基于Google BigTable模型开发的,典型的key/value系统;

HBase 底层依旧依赖 HDFS 来作为其物理存储,这点类似于 Hive。

逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensional map。

1.实时性:

Hive 适合用来对一段时间内的数据进行分析查询,例如,用来计算趋势或者网站的日志。Hive 不应该用来进行
实时的查询(Hive 的设计目的,也不是支持实时的查询)。因为它需要很长时间才可以返回结果;

HBase 则非适合用来进行大数据的实时查询,例如 Facebook 用 HBase 进行消息和实时的分析。

2.部署:

Hive 一般只要有 Hadoop 便可以工作。

HBase 则还需要 Zookeeper 的帮助(Zookeeper,是一个用来进行布式协 调的服务,这些服务包括配置服务,维护元信息和命名空间服务)

3.SQL查询

HBase 本身只提供了 Java 的 API 接口,并不直接支持 SQL 的语句查询。

Hive 则可以直接使用 HQL(一种类SQL 语言)。

如果想要在 HBase 上使用 SQL,则需要联合使用 Apache Phonenix,或者联合使用 Hive 和HBase。
但是和上面提到的一样,如果集成使用 Hive 查询 HBase 的数据,则无法绕过 MapReduce,
那么实时性还是有一定的损失。Phoenix 加 HBase 的组合则不经过 MapReduce 的框架,
因此当使用 Phoneix加 HBase 的组成,实时性上会优于 Hive 加 HBase 的组合。

4.存储层:

默认情况下 Hive 和 HBase 的存储层都是 HDFS。

但是 HBase 在一些特殊的情况下也可以直接使用本机  的文件系统。例如 Ambari 中的 AMS 服务直接在本地文件系统上运行 HBase

二、Hbase与传统数据库(RDBMS,全称为 Relational Database Management System)

表 1. HBase 与 RDBMS 的区别

 

Hbase

RDBMS

硬件架构

类似于 Hadoop 的分布式集群,硬件成本低廉

传统的多核系统,硬件成本昂贵

容错性

由软件架构实现,由于由多个节点组成,所以不担心一点或几点宕机

一般需要额外硬件设备实现 HA 机制

数据库大小

PB

GB、TB

数据排布方式

稀疏的、分布的多维的 Map

以行和列组织

数据类型

Bytes

丰富的数据类型

数据操作

插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系

传统数据库通常有各式各样的函数和连接操作

数据维护

Hbase的更新实际上是插入了新的数据

传统数据库只是替换和修改

事物支持

ACID 只支持单个 Row 级别

全面的 ACID 支持,对 Row 和表

查询语言

只支持 Java API (除非与其他框架一起使用,如 Phoenix、Hive)

SQL

索引

只支持 Row-key,除非与其他技术一起应用,如 Phoenix、Hive

支持

吞吐量

百万查询/每秒

数千查询/每秒

事务

Hbase只可以实现单行的事务性,意味着行与行之间、表与表之前不必满足事务性

传统数据库是可以实现跨行的事务性

存储模式:

Hbase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的,
这样的好处是数据即是索引,访问查询涉及的列大量降低系统的I/O,并且每一列由一个线程来处理,
可以实现查询的并发处理;

传统数据库是基于表格结构和行存储,其没有建立索引将耗费大量的I/O并且建立索引和物化试图需要
耗费大量的时间和资源。