ApachePig和ApacheHive有什么区别?

6yjfywim  于 2021-06-21  发布在  Pig
关注(0)|答案(5)|浏览(636)

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

avwztpqn

avwztpqn1#

Pig和 hive 的确切区别是什么?我发现两者都有相同的功能意义,因为它们用于做相同的工作。
看一看Pig和 hive 在坚果壳的比较 dezyre 文章
hive在分区、服务器、web界面和jdbc/odbc支持方面都优于pig。
一些区别:
hive最适合结构化数据,pig最适合半结构化数据
用于报告的Hive和用于编程的清管器
hive用作声明性sql&pig用作过程语言
hive支持分区,pig不支持
hive可以启动一个可选的基于节约的服务器&pig不能
hive先定义表(schema)+在数据库中存储schema信息,pig没有专用的数据库元数据
hive不支持avro,但pig支持
pig还支持额外的cogroup特性来执行外部连接,但hive不支持。但是hive和pig都可以动态地加入、排序和排序
那么什么时候使用哪种技术呢?
上述差异澄清了您的疑问。 HIVE :结构化数据,类似sql的查询,用于报告目的 PIG :半结构化数据,为map reduce作业编程一个包含一系列活动的工作流。
关于工作表现 HIVE 以及 PIG 与传统的Map缩小作业相比速度较慢。 Reason :最后,hive或pig脚本必须转换为一系列map reduce作业。
看看相关的se问题:
PigvsHivevs本地Map减少

iqxoj9l9

iqxoj9l92#

主要区别在于pig是一种数据流语言,hive是数据仓库。作为pig,可以使用类似于一个循序渐进的程序语言。但是hive被用作声明性语言。pig可用于获取在线流式非结构化数据。但是hive只能访问结构化数据,也可以使用jdbc和odbc驱动程序访问rdbms数据库(如sql、nosql)中的数据。pig可以将数据转换成avro格式,但pig不能。pig不能创建分区,但是hive可以。由于hive位于pig的顶部,所以hive只能在pig处理完数据后才能访问数据。这取决于何时我们必须使用pig和hive如果您使用的是结构化的关系数据,那么我们可以使用hive,否则我们可以使用pig。通过pig,我们可以与etl工具进行通信,但与hive相比,它需要更多的时间。但在pig而不是hive中很容易,因为在hive中我们必须在处理数据之前创建表。

kknvjkwl

kknvjkwl3#

从纯工程的Angular 来看,我发现pig比类似sql的语言更易于编写和维护。它是程序化的,所以你一个接一个地将一堆关系应用到你的数据中,如果有什么东西失败了,你可以在中间步骤轻松地进行调试,甚至还有一个名为“illustrate”的命令,它使用一个算法对一些与你的关系匹配的数据进行采样。我想说,对于逻辑复杂的工作,这肯定比Hive方便得多,但对于简单的东西,收益可能微乎其微。
关于接口,我发现pig比hive提供了很多灵活性。在pig中您没有表的概念,因此您可以直接操作文件,并且可以使用loader udf定义loader以将其加载到几乎任何格式,而无需在执行转换之前经历表加载阶段。在pig的最新版本中,它们有一个很好的特性,您可以使用动态调用器,即在pig脚本中直接使用几乎任何java方法,而不必编写udf。
对于性能/优化,根据我所见,您可以直接在pig中控制要使用的连接和分组算法的类型(我相信每个算法有3到4种不同的算法)。我个人从来没有使用过它,但是当你在编写要求很高的算法时,它可能会很有用,可以决定做什么,而不是像在hive中那样依赖优化器。所以我不会说它的性能一定比hive好,但是在优化器做出错误决策的情况下,您可以选择使用什么算法,并对发生的事情有更多的控制权。
我最近做的一件很酷的事情是拆分:可以拆分执行流,并对每个拆分应用不同的关系。所以你可以有一个非线性的数据集,根据一个字段将其拆分,然后对每个部分应用不同的处理,最后可能将结果连接在一起,所有这些都在同一个脚本中。我不认为你能在hive中做到这一点,你必须为每种情况编写不同的查询,但我可能错了。
还有一点需要注意,您可以在pig中增加计数器。不过,目前只能在pig自定义项中执行此操作。我认为你不能在Hive里使用计数器。
还有一些很好的项目也允许您将pig与hive接口(比如hcatalog),因此您可以通过简单地更改脚本中的加载程序,基本上从hive表读取数据,或将数据写入hive表(或两者兼而有之)。也支持动态分区。

sd2nnvve

sd2nnvve4#

apachepig是一个分析大型数据集的平台。pig的语言pig latin是一个简单的查询代数,它允许您表达数据转换,例如合并数据集、过滤数据集以及将函数应用于记录或记录组。用户可以创建自己的函数来做专门的处理。
pig查询在集群上以分布式方式执行。我们当前的实现将pig拉丁语程序编译成map reduce作业,并使用hadoop集群执行它们。
https://cwiki.apache.org/confluence/display/pig/index%3bjsessionid=f92df7021837b3dd048bf9529a434fda
hive是一个用于hadoop的数据仓库系统,它简化了数据摘要、即席查询和对存储在hadoop兼容文件系统中的大型数据集的分析。hive提供了一种机制,可以将结构投影到该数据上,并使用类似sql的语言hiveql查询数据。同时,这种语言还允许传统的map/reduce程序员在hiveql中表达这种逻辑不方便或效率低下时插入他们的自定义Map器和reducer。
https://cwiki.apache.org/hive/

vybvopom

vybvopom5#

apachepig和hive是两个在hadoop之上分层的项目,它们为使用hadoop的mapreduce库提供了更高级的语言。ApachePig提供了一种脚本语言,用于描述诸如读取、过滤、转换、连接和写入数据之类的操作——这正是mapreduce最初设计的操作。pig让用户不用像bash或perl脚本那样用一种语言来表达这些操作,而不用直接使用mapreduce的数千行java代码。pig非常适合原型化和快速开发基于mapreduce的作业,而不是用java本身编写mapreduce作业。
如果pig是“为hadoop编写脚本”,那么hive是“为hadoop编写sql查询”。apachehive提供了一种更具体、更高级的语言,用于通过运行hadoop作业来查询数据,而不是直接编写hadoop上几个mapreduce作业的逐步操作脚本。这种语言在设计上非常类似sql。hive仍然是一种工具,用于在海量数据上进行长时间运行的面向批处理的查询;在任何意义上都不是“实时”的。对于习惯于sql查询和商业智能系统的分析人员和业务开发人员来说,hive是一个很好的工具;它将使他们能够轻松地利用您闪亮的新hadoop集群,跨存储在上述存储系统中的数据执行即席查询或生成报告数据。

相关问题