Presto与Hive的比较

3,010 阅读6分钟

Presto vs Hive

Presto与Hive的区别

Apache Hive是一个运行在Apache Hadoop之上的数据仓库解决方案,允许你轻松地查询和分析大数据集。Hive使用类似SQL的方法查询数据,使得探索和分析大量数据变得简单。

Presto是一个分布式SQL查询引擎,可以从Hadoop、S3、MySQL、Teradata以及其他关系型和非关系型数据库中查询数据。Facebook创建的Presto可以对众多数据存储进行查询,响应时间从几分之一秒到几分钟不等。

Apache Hive和Presto都允许企业在业务数据上运行查询,但它们有几个区别性的特征,使它们具有独特性。

1.Hive和Presto之间的内存架构过程

Presto针对延迟进行了优化,而Hive则针对查询吞吐量进行了优化。Presto对查询中的每个任务所能容纳的内存有一个限制,因此如果一个查询需要大量的内存,查询就会失败。对于交互式查询来说,这样的错误处理逻辑(或缺乏这样的逻辑)是没有问题的;但是,对于必须可靠执行的每日/每周报告来说,这就不一样了。对于这样的活动,Hive是一个更好的选择。

Hive使用MapReduce。MapReduce中的每个操作都需要写入磁盘,而且每个阶段都必须等待前一个阶段完成后才能继续进行。因为MapReduce可以在众多服务器上处理任务,所以它在Hive中运行良好。通过分配任务,可以提高项目的速度。即使如此,数据还是必须写到磁盘上,这可能会刺激一些用户。

当Presto将SQL翻译成阶段时,每个阶段由众多任务执行,每个任务被分割成几个分片。所有的任务都是并行完成的,数据在各阶段之间通过管道发送。跨网络的内存-对内存也被用来传输数据,消除了对磁盘输入-输出事务的需求。

正因为如此,Presto的性能比Hive的性能快5-10倍。

2.ANSI SQL和名为HiveQL的类SQL语言

尽管Apache Hive利用的语言与SQL很接近,但有足够的差异,新用户必须重新训练一些查询。HiveQL,即Hive查询语言,包含一些古怪的东西,可能会让新人感到困惑。另一方面,任何熟悉SQL的人都应该能够很快掌握HiveQL。

当许多数据工程师第一次尝试Presto时,他们首先注意到的是,他们可以使用现有的SQL技能。Presto使用普通的SQL来执行查询,检索数据,并修改数据库中的数据。如果你懂得SQL,你可以马上开始使用Presto。许多人认为这是个好处。

3.扩展数组和地图

LATERAL VIEW(在Hive中)语句在与用户定义的表生成函数(如explode())一起使用时,会将列的地图或数组类型扁平化。通过LATERAL VIEW,explode函数可以同时用于ARRAY和MAP。

UNNEST可以用来扩展MAP或ARRAY。数组被折叠成一列,而地图被分成两列(键,值)。UNNEST通常与JOIN一起使用,它可以与连接左侧的关系中的列相关联。

Hive查询

SELECT student, mark
FROM tests
LATERAL VIEW explode(marks) t AS mark;

Presto查询

SELECT student, mark
FROM tests
Cross Join UNNEST explode(marks) t AS mark;

4.自定义代码插件

由于Presto是基于SQL的,你已经有了所有你需要的命令。一些工程师认为这是一个好处,因为它允许他们轻松检索和修改数据。

然而,不能插入自定义代码会给大数据专家用户带来问题。在这种情况下,Hive比Presto有一个优势。如果你对语言很了解的话,你可以把自定义代码放到你的查询中。这不是你一直需要做的事情,但在你做的时候会很方便。

5.Presto查询的小时限制

运行超过48小时的Presto查询将被立即终止。运行超过一两天的Presto查询通常是不成功的查询。

对于长期运行的查询,你可以将Presto查询重建为一个Hive查询。

6.列名转义

当一个列的名称与一个保留关键字的名称相匹配时,该列的名称必须被加引号。在Hive中,像大多数基于SQL的查询语言一样,引号字符是反斜线字符`。在Presto中,双引号字符""代替了"`",被用来引用列名。请看下面的例子。

SELECT `join` FROM Demo      # Hive
SELECT "join" FROM Demo      # Presto

7.数据限制

不幸的是,Presto作业所能存储的数据量是有限的。一旦你遇到这堵墙,Presto的理由就崩溃了。你几乎可以依靠Presto来很好地生成每小时或每天的报告。请记住,Facebook利用Presto,创造了大量的数据。然而,有一个限制。

Hive似乎没有任何数据限制,至少没有与现实世界场景相关的限制。对于制作周报或月报的企业来说,Hive是首选的数据查询解决方案。如果涉及到大量的数据,该项目将花费更长的时间。另一方面,Hive不会失败。它将继续工作,直到完成你所有的命令。

Presto与Hive的比较(信息图表)

下面是Presto与Hive的主要区别。

Presto-vs-Hive-info

主要区别

  • Presto不允许用户插入自定义代码,但Hive允许。
  • Presto使用ANSI SQL,而Hive使用HiveQL
  • Presto只能处理有限的数据量,因此对于较大的数据,建议使用Hive。

Hive与Presto的比较表

基础蜂巢普雷斯托
查询语言ANSI SQLHiveQL
速度比Hive的速度快5-10倍比Presto慢
自定义代码插件Presto 没有Hive允许用户插入自定义代码
语法差异
数据限制可以处理有限的数据量最好使用Hive来处理大数据
长时间运行的查询超过48小时就会终止使用Hive查询长期运行的查询。

结论 - Presto vs Hive

仅仅因为有些人喜欢Hive,这并不意味着你应该忽视Presto。如果运用得当,它的表现是令人钦佩的。Presto是一个能迅速工作的任务处理系统。只是不要一下子给它施加太多的压力。如果你这样做,你就会面临失败的机会。另外,Apache Hive和Presto都是开源工具,所以每一个的源代码都是免费提供的。