本地模式下的猪与没有 hadoop.jar 的猪之间的区别

Posted

技术标签:

【中文标题】本地模式下的猪与没有 hadoop.jar 的猪之间的区别【英文标题】:Diffence between Pig on local mode vs pig-withouthadoop.jar 【发布时间】:2015-03-30 16:23:08 【问题描述】:

我想知道,如果我在本地模式下使用 pig(内部调用 Map reduce)与使用 PIG-withouthadoop.jar 文件相比,性能增益或损失是多少?

PIG-withouthadoop.jar真的不用hadoop吗???

如果我只想在没有集群的情况下使用 Pig,比如设计数据流,那么我应该使用什么?本地模式下的 Pig 或 pig-withouthadoop.jar 文件??

目前我已经使用 pig 本地模式编写了我的脚本,并且在尝试在服务器中部署并在本地模式下设置 PIG 时,我认为在设置 PIG_HOME 变量之前我还需要在环境变量中设置 HADOOP_HOME

请多多指教..

提前致谢。 :)

【问题讨论】:

已经等待了很长时间..请提供任何想法或分享一些关于这个问题的信息..问候.. :) 我知道如果我在位于 $PIG_HOME/bin 的 pig 文件中添加 HADOOP_BIN=,那么我不需要再设置 hadoop_home,所以这里发生了什么......它那不需要hadoop了?? 【参考方案1】:

让我按顺序回答你的问题:

1) 当我们谈论性能时,如果我们假设文件大小和 Pig 脚本是恒定的,同时在本地模式和 Hadoop 模式下运行。然后,在本地模式下处理肯定会更快,因为所有任务都在单个 JVM 中执行,但在 Hadoop 模式下,输入文件将被传送到数据节点,然后 Pig 脚本或 UDF 也会得到传送到集群。这将需要更多时间,尽管在这两种情况下,pig 脚本和 UDF 都将在内部转换为 map 和 reduce 任务,并且在这两种情况下构建的 map 和 reduce 类的数量总是相同的。我们可以使用 EXPLAIN 命令检查这一点。

2) 不,Pig 内部包含一组 Hadoop jar。因此,如果您还没有使用 start-all.sh 命令启动 Hadoop,则 pig 将使用内部 Hadoop 捆绑 jar 来工作。现在,有趣的是,如果你已经安装了 hadoop,然后在没有启动 Hadoop 的情况下使用 pig,那么有时它会因为 Hadoop 版本不匹配而无法工作。所以为了安全起见,明确地启动 Hadoop。所以,Pig 总是使用 Hadoop。 :)

3) 如果文件大小较小,请始终使用 Hadoop 本地模式。如前所述,Pig 默认带有 Hadoop jars。

4) 是的,如果您明确使用 Hadoop,则需要设置此项。

【讨论】:

【参考方案2】:

Local 模式实际上是在一个 JVM 中运行 Pig、HDFS 和 MR1(或 YARN+MR2)。

比较 localcluster 模式的性能差异并不重要。本地模式通常用于测试或运行可以在 1 个节点上工作的小型 MR 作业。

关于 pig-withouthadoop.jar,我可以看到 jar 的名称如何解释为 Pig 不会使用 Hadoop。但事实并非如此。

Pig 打包两个与执行相关的 jar:

pig.jar,这是一个“超级 jar”,还包括所有 hadoop 和 mapreduce jar。你可以把那个 jar 放在一个还没有安装 hadoop 的盒子上,然后运行 ​​pig(在设置正确的配置和环境之后)。 但大多数集群已经安装和配置了 hadoop。在这种情况下,您使用 pig-withouthadoop.jar。出于显而易见的原因,这个罐子的大小只有 uber 罐子的一半。

您需要确保 hadoop 配置 hdfs-site.xml、mapred-site.xml 等在标准位置 (/etc/hadoop/conf/ > 通常)让 Pig 工作。

【讨论】:

以上是关于本地模式下的猪与没有 hadoop.jar 的猪之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

删除匹配模式的猪目录

风口的猪-中国牛市

如何从复杂的猪数据类型中提取简单的猪数据类型

带字符串的猪代数

一只特立独行的猪

hortonworks沙箱中的猪错误