6

有没有办法控制 Hadoop Streaming 作业的输出文件名?具体来说,我希望我的工作的输出文件内容和名称由减速器输出的 ket 组织 - 每个文件只包含一个键的值,它的名称就是键。

更新:刚刚找到答案 - 使用从 MultipleOutputFormat 派生的 Java 类作为作业输出格式允许控制输出文件名。 http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

我还没有看到任何示例...任何人都可以指出使用自定义输出格式 Java 类的 Hadoop Streaming 示例吗?

4

2 回答 2

8

使用派生自 MultipleOutputFormat 的 Java 类作为作业输出格式可以控制输出文件名。http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

使用 Hadoop Streaming 时,由于只支持一个 JAR,因此您实际上必须派生流 jar 并将新的输出格式类放入其中,以便流作业能够引用它...

编辑: 从 hadoop 0.20.2 版开始,该类已被弃用,您现在应该使用: http ://hadoop.apache.org/docs/mapreduce/current/api/org/apache/hadoop/mapreduce/lib/output /MultipleOutputs.html

于 2009-08-05T02:29:56.703 回答
-1

通常,Hadoop 会让您将整个目录视为输出,而不是单个文件。无论是使用 Streaming 还是常规 Java 作业,都无法直接控制文件名。

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

于 2009-05-24T16:39:57.710 回答