首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Apache Pig和Apache Hive有什么区别?

Apache Pig和Apache Hive有什么区别?
EN

Stack Overflow用户
提问于 2012-04-23 19:47:47
回答 4查看 19.1K关注 0票数 18

Pig和Hive的确切区别是什么?我发现两者具有相同的功能含义,因为它们用于做相同的工作。唯一的事情是实现,这对两者都是不同的。那么什么时候该使用哪种技术呢?有没有明确说明两者在适用性和性能方面的区别的规范?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-23 20:44:44

Apache Pig和Hive是两个基于Hadoop的项目,它们为使用Hadoop的MapReduce库提供了一种更高级的语言。Apache Pig提供了一种脚本语言,用于描述读取、过滤、转换、联接和写入数据等操作--这些操作与MapReduce最初设计的操作完全相同。Pig让用户用一种类似于bash或perl脚本的语言来表达这些操作,而不是用成千上万行直接使用MapReduce的Java代码来表达它们。Pig非常适合原型化和快速开发基于MapReduce的作业,而不是在Java语言中编写MapReduce作业。

如果Pig是"scripting for Hadoop",那么Hive就是"SQL queries for Hadoop“。Apache Hive提供了一种更具体、更高级的语言,用于通过运行Hadoop作业来查询数据,而不是直接为Hadoop上的几个MapReduce作业的操作编写脚本。这种语言在设计上非常类似于SQL。Hive仍然是一个在海量数据上长期运行的面向批处理的查询工具;它在任何意义上都不是“实时”的。对于习惯于使用类似SQL的查询和商业智能系统的分析师和业务开发人员来说,Hive是一款优秀的工具;它可以让他们轻松地利用全新的Hadoop集群来执行即席查询,或者跨存储在上述存储系统中的数据生成报告数据。

票数 37
EN

Stack Overflow用户

发布于 2012-04-24 00:05:59

从纯工程的角度来看,我发现PIG比类似SQL的语言更容易编写和维护。它是过程性的,所以您可以将一堆关系逐一应用于您的数据,如果某些操作失败,您可以轻松地在中间步骤进行调试,甚至可以使用名为“relation”的命令,该命令使用一种算法来采样一些与您的关系匹配的数据。我要说的是,对于具有复杂逻辑的作业,这肯定比Hive方便得多,但对于简单的东西,收益可能是最小的。

关于接口,我发现与Hive相比,PIG提供了更多的灵活性。在PIG中你没有表的概念,所以你可以直接操作文件,并且你可以定义loader来使用loader UDF非常容易地将其加载成几乎任何格式,而不必在进行转换之前经历表加载阶段。它们在PIG的最新版本中有一个很好的特性,你可以使用动态调用器,也就是在你的PIG脚本中直接使用几乎任何Java方法,而不需要编写UDF。

对于性能/优化,根据我所看到的,你可以在PIG中直接控制你想要使用的连接和分组算法的类型(我相信每个算法都有3到4个不同的算法)。我个人从来没有用过它,但当你在编写要求苛刻的算法时,能够决定做什么可能是有用的,而不是像在Hive中那样依赖于优化器。所以我不会说它的性能一定比Hive好,但在优化器做出错误决定的情况下,你可以选择使用什么算法,并对发生的事情有更多的控制。

我最近做的一件很酷的事情就是拆分:你可以拆分你的执行流,并对每个拆分应用不同的关系。因此,您可以拥有一个非线性数据集,根据字段将其拆分,并对每个部分应用不同的处理,最后可能会将结果连接在一起,所有这些都在同一个脚本中。我不认为你可以在Hive中做到这一点,你必须为每种情况编写不同的查询,但我可能错了。

还需要注意的一件事是,您可以在PIG中增加计数器。不过,目前您只能在PIG UDF中执行此操作。我不认为你可以在蜂巢里使用计数器。

还有一些很好的项目允许您将PIG与Hive接口(如HCatalog),因此您基本上可以通过简单地更改脚本中的加载器来从hive表中读取数据,或者将数据写入hive表(或者两者都有)。也支持动态分区。

票数 7
EN

Stack Overflow用户

发布于 2012-04-24 04:46:49

Apache Pig是一个用于分析大型数据集的平台。Pig的语言Pig拉丁语是一种简单的查询代数,它允许您表达数据转换,例如合并数据集、过滤数据集以及将函数应用于记录或记录组。用户可以创建自己的函数来进行特殊用途的处理。

Pig拉丁语查询在集群上以分布式方式执行。我们目前的实现将Pig拉丁语程序编译成Map-Reduce作业,并使用Hadoop集群执行它们。

https://cwiki.apache.org/confluence/display/PIG/Index%3bjsessionid=F92DF7021837B3DD048BF9529A434FDA

Hive是用于Hadoop的数据仓库系统,可简化数据汇总、即席查询和分析存储在Hadoop兼容文件系统中的大型数据集。Hive提供了一种机制,可以将结构投影到这些数据上,并使用一种名为HiveQL的类似SQL的语言来查询数据。同时,当用HiveQL表达这种逻辑不方便或低效时,这种语言还允许传统的map/reduce程序员插入他们的定制映射器和缩减程序。

https://cwiki.apache.org/Hive/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10279942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档