在Hadoop流中生成单独的输出文件

在Hadoop流中生成单独的输出文件

问题描述:

仅使用映射器(Python脚本)并且不使用缩减器,我怎样才能输出一个单独的文件,其中键为文件名,对于每行输出而不是长输出文件?在Hadoop流中生成单独的输出文件

您可以使用python文件函数写入本地文件系统的文本文件,或者如果您想使用HDFS,请使用Thrift API

+0

在写入本地文件系统或hdfs时,同时写入同一文件的多个映射器如何处理? – 2011-10-11 00:58:46

+0

这样做很糟糕。它与重试任务相冲突,并保证你需要照顾你的工作。 – nkadwa 2013-04-22 14:27:50

使用流时,可以替换outputFormatClass吗? 在原生Java实现中,您将扩展MultipleTextOutputFormat类并修改命名输出文件的方法。然后使用JobConf的setOutputFormat方法将您的实现定义为新的输出格式

您应该验证是否可以在流中使用。我不知道: -/

可以使用-inputformat和-outputformat命令行参数来替换input和outputformat类。

如何做到这一点的一个例子可以在dumbo project中找到,它是一个用于编写流式作业的Python框架。它具有写入多个文件的功能,并在内部使用其姐妹项目feathers - fm.last.feathers.output.MultipleTextFiles中的类替换输出格式。

然后reducer需要发出一个元组作为键,元组的第一个组件是指向具有键/值对的文件应写入的目录的路径。可能仍然有多个文件,这取决于reducer和应用程序的数量。

我推荐查看dumbo,它具有许多功能,可以更容易在Python中的Hadoop上编写Map/Reduce程序。