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