如何控制Hadoop流作业的输出文件名和内容?

如何控制Hadoop流作业的输出文件名和内容?,hadoop,mapreduce,distributed-computing,Hadoop,Mapreduce,Distributed Computing,有没有办法控制Hadoop流作业的输出文件名? 具体地说,我希望我的作业的输出文件内容和名称由减速机输出的文件组织-每个文件将只包含一个键的值,其名称将是键 更新: 刚刚找到答案-使用从MultipleOutputFormat派生的Java类作为作业输出格式,可以控制输出文件名。 我还没有看到这方面的任何样品。。。 任何人都可以指出Hadoop流样本使用自定义输出格式java类?,Hadoop一般认为整个目录是输出,而不是单个文件。无论是使用流式还是常规Java作业,都无法直接控制文件名 但是

有没有办法控制Hadoop流作业的输出文件名? 具体地说,我希望我的作业的输出文件内容和名称由减速机输出的文件组织-每个文件将只包含一个键的值,其名称将是键

更新: 刚刚找到答案-使用从MultipleOutputFormat派生的Java类作为作业输出格式,可以控制输出文件名。

我还没有看到这方面的任何样品。。。
任何人都可以指出Hadoop流样本使用自定义输出格式java类?

,Hadoop一般认为整个目录是输出,而不是单个文件。无论是使用流式还是常规Java作业,都无法直接控制文件名


但是,在作业完成后,没有什么可以阻止您进行此拆分和重命名。您可以使用$HADOOP dfs-cat path/to/your/output/directory/part-*,并将其传输到您的脚本,该脚本通过键将内容拆分并写入新文件。

使用一个Java类,该类派生自MultipleOutputFormat,作为作业输出格式,允许控制输出文件名

当使用Hadoop流媒体时,由于只支持一个JAR,所以实际上您必须将流媒体JAR分叉,并将新的输出格式类放入其中,以便流媒体作业能够引用它

编辑: 从hadoop的0.20.2版开始,该类已被弃用,您现在应该使用:

一般来说,这不是您想要采取的方法。