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

时间:2009-10-26 19:17:29

标签: python streaming hadoop mapreduce

仅使用映射器(Python脚本)而不使用reducer,如何输出一个单独的文件,其中每个输出行都使用键作为文件名,而不是输出长文件?

3 个答案:

答案 0 :(得分:7)

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

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

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

我建议调查dumbo,它有许多功能,可以更容易在python中的Hadoop上编写Map / Reduce程序。

答案 1 :(得分:1)

使用流媒体时是否可以替换outputFormatClass? 在本机Java实现中,您将扩展MultipleTextOutputFormat类并修改命名输出文件的方法。然后使用JobConf的setOutputFormat方法

将您的实现定义为新的outputformat

你应该验证,如果这也可以在流媒体中。我不知道: - /

答案 2 :(得分:1)

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