当我尝试以这种方式运行具有两个“存储”到同一个文件的 Pig 脚本时
store Alert_Message_Count into 'out';
store Warning_Message_Count into 'out';
它挂起,我的意思是在显示完成 50% 后它不会继续。
这是错的吗?我们不能将两个结果存储在同一个文件(文件夹)中吗?
当我尝试以这种方式运行具有两个“存储”到同一个文件的 Pig 脚本时
store Alert_Message_Count into 'out';
store Warning_Message_Count into 'out';
它挂起,我的意思是在显示完成 50% 后它不会继续。
这是错的吗?我们不能将两个结果存储在同一个文件(文件夹)中吗?
HDFS 没有附加模式。因此,在大多数情况下,您正在运行 map-reduce 程序,输出文件打开一次,数据写入然后关闭。假设这种方法您不能同时将数据写入同一个文件。
尝试写入单独的文件并检查 map-red 程序是否没有挂起。如果他们仍然这样做,那么还有其他一些问题。
您可以获取结果和 map-reduce 日志来分析问题所在。
[编辑:]
您不能写入同一个文件或附加到现有文件。HDFS 追加功能正在进行中。
为此,您可以做两件事:
1)如果您在 Alert_Message_Count 和 Warning_Message_Count 中具有相同的架构内容,则可以按照 Chris 的建议使用 union。
2)当架构不同时进行后处理。那就是编写一个 map reduce 程序,将两个单独的输出合并为一个。
通常 Hadoop MapReduce 不允许您将作业输出保存到已经存在的文件夹中,所以我猜这也是不可能的(看到 Pig 将命令转换为一系列 M/R 步骤) - 但我会期望某种形式的错误消息,而不是仅仅挂起。
如果您打开集群作业跟踪器并查看任务日志,日志是否会产生任何有助于进一步诊断的信息?
也可能值得检查猪邮件列表(如果您还没有)
如果要将一个数据集附加到另一个数据集,请使用union
关键字:
grunt> All_Count = UNION Alert_Message_Count, Warning_Message_Count;
grunt> store All_Count into 'out';