浅谈Hive和HBase有哪些区别与联系及适用场景

1,194 阅读7分钟

在学大数据分析的过程中,Hive和HBase是两个非常重要的内容,对于初学者而言容易混淆。所以比较两者的联系与差别,能够帮助我们对这两个组件有一个清晰的认识和定位。那么,Hive和HBase有哪些区别与联系以及适用于哪些场景呢?

首先还要从两者的概念入手。Hive是运行在Hadoop上的一个工具,准确地讲是一个搜索工具。当对海量数据进行搜索时,Hadoop的计算引擎是MapReduce。但是对MapReduce的操作和编程是非常复杂的。于是Hive的存在就让复杂的编程过程简化成了用SQL语言对海量数据的操作。这大大减轻了程序员的工作量。可以说,Hive的存在让海量数据的增删改查更加方便。其实从Hive的logo就可以看出Hive让大象变成了小蜜蜂,化繁为简是它最本质的亮点。

再来说说HBase,它是Hadoop的子项目,当然也可以理解为一个工具。Hadoop的数据运算是由MapReduce完成的,而数据存储是由HDFS完成的。HDFS是分布式存储,这是Hadoop存储数据的特点,但由此带来的问题就是数据的无序和散乱。HBase的产生,很好地解决了这一问题。HBase能够把这些数据映射成一张哈希表,那么,这些数据一旦成为具有实际存储意义的表之后,就由无序变得有序,从而对数据搜索和操作的效率大大提高了、

做一个总结,Hive和HBase都是Hadoop集群下的工具,Hive是对MapReduce的优化,而HBase则是HDFS数据存储的大管家。那么,这两者各适用于哪些场景呢?

1.Hive中的表为纯逻辑表,仅仅对表的元数据进行定义。Hive没有物理存储的功能,它完全依赖HDFS和MapReduce。尚学堂陈老师指出这样就可以将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询功能,并将SQL语句最终转换为MapReduce任务进行运行。HBase表则是物理表,适合存放非结构化的数据。

2.Hive是在MapReduce的基础上对数据进行处理,而MapReduce的数据处理依照行模式;而HBase为列模式,这样使得对海量数据的随机访问变得可行。

3.HBase的存储表存储密度小,因而用户可以对行定义成不同的列;而Hive是逻辑表,属于稠密型,即定义列数,每一行对列数都有固定的数据。

4.Hive使用Hadoop来分析处理数据,而Hadoop系统是批处理系统,所以数据处理存在延时的问题;而HBase是准实时系统,可以实现数据的实时查询。

5.Hive没有row-level的更新,它适用于大量append-only数据集(如日志)的批任务处理。而基于HBase的查询,支持和row-level的更新。

6.Hive全面支持SQL,一般可以用来进行基于历史数据的挖掘、分析。而HBase不适用于有join,多级索引,表关系复杂的应用场景。

两者使用场景的区别:

HBase的应用场景通常是采集网页数据的存储,因为它是key-value型数据库,从而可以到各种key-value应用场景,例如存储日志信息,对于内容信息不需要完全结构化出来的类CMS应用等。注意hbase针对的仍然是OLTP应用为主。

hive主要针对的是OLAP应用,其底层是hdfs分布式文件系统,重点是基于一个统一的查询分析层,支撑OLAP应用中的各种关联,分组,聚合类SQL语句。hive一般只用于查询分析统计,而不能是常见的CUD操作,要知道HIVE是需要从已有的数据库或日志进行同步最终入到hdfs文件系统中,当前要做到增量实时同步都相当困难。

以上就是关于Hive和HBase有哪些区别与联系及适用场景的论述,希望对学大数据分析的同学有所帮助。

分解HBase的工作原理及底层结构!

HBase 是一种列式的分布式数据库,是由当年的 Google 公布的 BigTable 的论文而生。 HBase 底层依旧依赖 HDFS 来作为其物理存储。

与传统关系数据库的区别

区别主要是下面几点:

Hbase

hbase只支持只支持单个 Row 级别的ACID。

索引只支持 Row-key。

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

由于是联机处理所以处理速度能达到百万查询/每秒。

数据能达到PB级别。

结构

在 HBase 中首有 Column Family 的概念,简称为 CF。CF 一般用于将相关的列(Column)组合起来。在物理上 HBase 其实是按 CF 存储的,只是按照 Row-key 将相关 CF 中的列关联起来。

Hbase 逻辑排布与物理上排布的关联

HBase 的相关模块

MasterHBase Master 用于协调多个 Region Server,侦测各个 Region Server 之间的状态,并平衡 Region Server 之间的负载。HBase Master 还有一个职责就是负责分配 Region 给 Region Server。HBase 允许多个 Master 节点共存。 Region Server对于一个 Region Server 而言,其包括了多个 Region。Region Server 的作用只是管理表格,以及实现读写操作。 Zookeeper对于 HBase 而言,Zookeeper 的作用是至关重要的。首先 Zookeeper 是作为 HBase Master 的 HA 解决方案。也就是说,是 Zookeeper 保证了至少有一个 HBase Master 处于运行状态。 HBase 的运行原理

HBase 的集群是通过 Zookeeper 协调各个服务间,也就是说 HBase Master 与 Region Server 之间的关系是依赖 Zookeeper 来维护。应用 需要访问 HBase 集群时,应用需要先和Zookeeper 来通信,然后在本地保存一份服务列表,然后才会找到对应的 Region Server。每一个 Region Server 管理着很多个 Region。对于 HBase 来说,Region 是 HBase 是最基本的存储区域。数据存储在 Region 中。每一个 Region 只存储一个 Column Family 的数据,并且是该 CF 中的一段)。Region 所能存储的数据大小是有上限的,当达到该上限时,Region 会进行分裂,数据也会分裂到多个 Region 中,通过这种并行方式写入提系统的性能,提高数据的容量。每个 Region 藏在着多个 Store 对象。每个 Store 都包含一个 MemStore,及一个或多个 HFile。MemStore 是数据在内存中的对象,一般都是有序的。当数据要保存到 Region 的时候,要先写入 MemStore。当 MemStore 中的数据达到最大值时,Store 会创建 StoreFile,而 StoreFile 就是对 HFile 一层封装。即 MemStore 中的数据最终写入到 HFile 中,保存到存储设备中 。

HFile

HFile 由很多个数据块组成,并且有一个固定的结尾块。其中的数据块是由一个 Header 和多个 Key-Value 的键值对组成的。在结尾的数据块中包含了数据相关的索引信息,系统通过索引信息找到 存储在HFile 中的数据。HFile 中的数据块大小默认为 64KB,可以通过相关配置文件设置大小。访问 HBase 数据库多为有序的访问时,可以设置大一些。场景多为随机访问,要设置的小一些。

HBase 就是一个有序的多维 Map,其中每一个 Row-key 保存了数据,这些数据存储在 CF 中的 Column。 HBase实际上是按照谷歌的bigtable实现的,而谷歌在bigtable论文的开篇就介绍了bigtable的特点:A Bigtable is a sparse, distributed, persistent multidimensional sorted map。所以HBase在本质上,是一张有序的多维map,数据模型可以抽象成:


<rowKey : columnFamily : qualifier : timestamp, value>

这样的优点是,HBase只存储有值的单元格,对于一张稀疏表来说,可以节省很多存储空间;但是,为每个cell都存储了rowKey, columnFamily, qualifier,因此cf的名字不要太长。