Hadoop加载和存储

时间:2012-06-05 22:29:06

标签: hadoop apache-pig hdfs

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

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

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

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

2 个答案:

答案 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';