从 oozie 以本地模式运行 PIG

Posted

技术标签:

【中文标题】从 oozie 以本地模式运行 PIG【英文标题】:Run PIG in local mode from oozie 【发布时间】:2015-08-03 10:35:29 【问题描述】:

我想在本地模式下运行PIG,非常简单 猪 -x 本地 file.pig

我的要求是从 OOZIE 以本地模式运行 PIG? 有没有可能我认为OOZIE会先自动启动地图任务?

【问题讨论】:

【参考方案1】:

这是可能的。当 Oozie 运行 pig 脚本时,它作为 one-map map-reduce 作业运行,它只运行 pig 脚本,然后运行其他 map-reduce 作业(当 pig 在mapred 模式下运行时)。

看起来,Pig 动作配置不允许在本地模式下运行,但您仍然可以使用 shell 动作类型在本地模式下运行 Pig 脚本。您只需确保您的脚本、输入和输出数据都在 HDFS 中。

【讨论】:

感谢您的回答但是 Pig 在本地模式下从本地文件系统而不是 HDFS 加载/存储数据。将猪放在 hdfs 上有意义,但 hdfs 上的输入和输出路径有意义吗?你能告诉我如何为此编写 oozie 工作流程吗? 你应该知道 Oozie 是如何运行的。它将pig 或shell 脚本作为map-reduce 作业运行,只有一个mapper,没有reducer。因此,从 map-reduce 集群中随机选择一个执行节点。所以你不能提前说哪个节点会运行你的脚本。因此,使用本地文件系统没有意义,请使用 HDFS,因为它在所有节点上都可用。使用 'hdfs://namenode:port/path/to/file' 形式的完整 URI 在 pig 脚本中引用 HDFS 路径。 如果您在使用 Oozie 在本地模式下运行 pig 很有用时提供了一些推理,那就太好了。 所有作业调度我们都使用 oozie 框架,所以我们希望使用相同的框架,但在本地模式下运行 pig,因为数据量较少,本地模型比 mapred 模式更快【参考方案2】:

我不认为,我们可以从 oozie 以本地模式运行 pig。 Vishal 写的评论是有道理的。在某些数据量较少的情况下,最好在本地模式下使用 pig。要在本地模式下运行,您可以通过编写 shell 脚本并在 crontab 中安排它来运行。如果您通过 oozie 尝试此操作。据我所知,它不太适合,因为 Oozie 旨在在 HDFS 中运行。

如果你想让 oozie 在一些数据上运行。它希望数据在 HDFS 中(即分布式)。而且您必须在 hdfs 中也有 pig 脚本。我记得看到 AlanGates 的帖子,他提到 PIG 旨在处理来自/到 HDFS 的数据,而 hive 是本地的HDFS 或 HDFS 到 HDFS。

【讨论】:

以上是关于从 oozie 以本地模式运行 PIG的主要内容,如果未能解决你的问题,请参考以下文章

Pig 在本地模式与 mapreduce 模式下的性能

猪本地模式溢出数据问题

pig@hadoop:使用多核处理没有 hdfs 的本地文件

pig的各种运行模式与运行方式详解

大文件上的本地模式猪

从 oozie 提交猪作业