1

当我尝试以这种方式运行具有两个“存储”到同一个文件的 Pig 脚本时

store Alert_Message_Count into 'out';
store Warning_Message_Count into 'out';

它挂起,我的意思是在显示完成 50% 后它不会继续。

这是错的吗?我们不能将两个结果存储在同一个文件(文件夹)中吗?

4

2 回答 2

1

HDFS 没有附加模式。因此,在大多数情况下,您正在运行 map-reduce 程序,输出文件打开一次,数据写入然后关闭。假设这种方法您不能同时将数据写入同一个文件。

尝试写入单独的文件并检查 map-red 程序是否没有挂起。如果他们仍然这样做,那么还有其他一些问题。

您可以获取结果和 map-reduce 日志来分析问题所在。

[编辑:]

您不能写入同一个文件或附加到现有文件。HDFS 追加功能正在进行中。

为此,您可以做两件事:

1)如果您在 Alert_Message_Count 和 Warning_Message_Count 中具有相同的架构内容,则可以按照 Chris 的建议使用 union。

2)当架构不同时进行后处理。那就是编写一个 map reduce 程序,将两个单独的输出合并为一个。

于 2012-06-05T22:49:31.783 回答
0

通常 Hadoop MapReduce 不允许您将作业输出保存到已经存在的文件夹中,所以我猜这也是不可能的(看到 Pig 将命令转换为一系列 M/R 步骤) - 但我会期望某种形式的错误消息,而不是仅仅挂起。

如果您打开集群作业跟踪器并查看任务日志,日志是否会产生任何有助于进一步诊断的信息?

也可能值得检查猪邮件列表(如果您还没有)

如果要将一个数据集附加到另一个数据集,请使用union关键字:

grunt> All_Count = UNION Alert_Message_Count, Warning_Message_Count;
grunt> store All_Count into 'out';
于 2012-06-05T22:48:36.827 回答