Pig on local 模式与 pig-withouthadoop.jar 的区别

Diffence between Pig on local mode vs pig-withouthadoop.jar

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

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

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

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

请指教..

提前致谢。 :)

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

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

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

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

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

无论哪种方式,您都需要确保 hadoop 配置 hdfs-site.xml、mapred-site.xml 等位于标准位置(/etc/hadoop/conf/ 通常)让 Pig 工作。

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

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

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

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

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