我有兴趣了解最近发布的 ( http://mirror.facebook.com/facebook/hive/hadoop-0.17/ ) Hive 在性能方面与 HBase 的比较。Hive 使用的类 SQL 接口比我们实现的 HBase API 更可取。
7 回答
很难找到很多关于 Hive 的信息,但我在 Hive 网站上发现了这个片段,它非常支持 HBase(加粗):
Hive 基于 Hadoop,它是一个批处理系统。因此,该系统没有也不能保证查询的低延迟。这里的范例严格来说是提交作业并在作业完成时收到通知,而不是实时查询。因此,不应将其与像 Oracle 这样的系统进行比较,在这些系统中,分析是在非常少量的数据上进行的,但分析进行得更多的是迭代,迭代之间的响应时间不到几分钟。对于 Hive 查询,即使是最小作业的响应时间也可能在 5-10 分钟左右,而对于较大的作业,这甚至可能需要数小时。
由于 HBase 和 HyperTable 都是关于性能的(以 Google 的 BigTable 为模型),它们听起来肯定比 Hive 快得多,但代价是功能和更高的学习曲线(例如,它们没有连接或 SQL类似语法)。
从一个角度来看,Hive 由五个主要组件组成:类似 SQL 的语法和解析器、查询计划器、查询执行引擎、元数据存储库和列式存储布局。它的主要关注点是数据仓库式的分析工作负载,因此不需要通过键检索值的低延迟。
HBase 有自己的元数据存储库和列式存储布局。可以在 HBase 表上编写 HiveQL 查询,从而允许 HBase 利用 Hive 的语法和解析器、查询计划器和查询执行引擎。有关更多详细信息,请参阅http://wiki.apache.org/hadoop/Hive/HBaseIntegration。
Hive 是一个分析工具。就像 pig 一样,它被设计用于通过利用 map reduce 对潜在的大量数据进行临时批处理。想想太字节。想象一下尝试在关系数据库中做到这一点......
HBase 是基于 BigTable 的基于列的键值存储。尽管您可以在 HBase 上运行 map reduce 作业,但您本身不能进行查询。它的主要用例是按键获取行,或扫描行的范围。一个主要功能是在跨行键范围扫描“系列”列时能够具有数据局部性。
据我所知,Hive 更可与 Pig 相媲美。Hive 类似于 SQL,而 Pig 是基于脚本的。Hive 似乎在查询优化和执行引擎方面更加复杂,并且需要最终用户指定架构参数(分区等)。两者都打算处理文本文件或序列文件。
HBase 用于键值数据存储和检索……您可以扫描或过滤这些键值对(行)。您不能对(键,值)行进行查询。
Hive 和 HBase 用于不同的目的。
蜂巢:
优点:
- Apache Hive是建立在Hadoop之上的数据仓库基础架构。
- 它允许通过HQL查询存储在HDFS上的数据以进行分析, HQL是一种类似 SQL 的语言,将转换为一系列Map Reduce Jobs
- 它只在 Hadoop 上运行批处理。
- 它与JDBC 兼容,还与现有的基于 SQL 的工具集成
- Hive 支持分区
- 支持对一段时间内收集的数据进行分析查询
缺点:
- 目前不支持更新语句
- 它应该提供一个预定义的模式来将文件和目录映射到列中
HBase:
优点:
- 一个可扩展的分布式数据库,支持大型表的结构化数据存储
- 它提供对您的大数据的随机、实时读/写访问。HBase 操作在其数据库上实时运行,而不是 MapReduce 作业
- 它支持对表进行分区,并且将表进一步拆分为列族
- 使用 Hadoop横向扩展海量数据
- 在存储或检索时提供基于密钥的数据访问。它支持添加或更新行。
- 支持数据的版本控制。
缺点:
- HBase 查询是用需要学习的自定义语言编写的
- HBase 不完全符合 ACID
- 它不能用于复杂的访问模式(例如连接)
- 在进行大批量 MapReduce 时,它也不能完全替代 HDFS
概括:
Hive 可用于分析查询,而 HBase 可用于实时查询。数据甚至可以从 Hive 读取和写入 HBase 并再次返回。
在最近的 Hive 版本中,由于Hive 和 HBase 现在已集成,因此需要进行小幅更新的很多变化。这意味着 Hive 可以用作 HBase 数据存储的查询层。现在,如果人们正在寻找替代的 HBase 接口,Pig 还提供了一种非常好的加载和存储 HBase 数据的方法。此外,看起来Cloudera Impala可能会在 HBase 之上提供基于 Hive 的高性能查询。他们声称与传统 Hive 设置相比,查询速度提高了 45 倍。
为了比较 Hive 和 Hbase,我想回顾一下下面的定义:
旨在处理事务的数据库并非旨在处理分析。它的结构不能很好地进行分析。另一方面,数据仓库的结构使分析变得快速和容易。
Hive 是建立在 Hadoop 之上的数据仓库基础架构,适用于长时间运行的 ETL 作业。Hbase 是一个旨在处理实时事务的数据库