3

这是详细信息:

输入文件在 hdfs 路径/user/rd/input中,hdfs 输出路径/user/rd/output 在输入路径中,part-00000 到 part-19999 有 20000 个文件,每个文件大约 64MB。我想做的是编写一个hadoop流作业将这20,000个文件合并为10,000个文件。

有没有办法使用 hadoop 流作业将这 20,000 个文件合并为 10,000 个文件?或者,换句话说,有没有办法控制hadoop流输出文件的数量?

提前致谢!

4

1 回答 1

8

看起来你现在有一个仅限地图的流媒体作业。仅映射作业的行为是每个映射任务有一个输出文件。对于改变这种行为,您无能为力。

您可以通过添加 reduce 阶段来利用 MapReduce 的工作方式,使其拥有 10,000 个 reducer。然后,每个reducer 将输出一个文件,因此您剩下10,000 个文件。请注意,您的数据记录将“分散”在 10,000 个中......它不会只是连接两个文件。为此,请-D mapred.reduce.tasks=10000在命令行参数中使用该标志。

这可能是默认行为,但您也可以将身份归约器指定为归约器。除了传递记录之外,这不会做任何事情,这就是我认为你想要的。使用此标志来执行此操作:-reducer org.apache.hadoop.mapred.lib.IdentityReducer

于 2013-10-11T14:54:19.290 回答