如何控制hadoop流输出文件的数量

时间:2013-10-11 08:51:03

标签: hadoop hadoop-streaming

以下是详细信息:

输入文件位于hdfs路径/user/rd/input中,hdfs输出路径为/user/rd/output 在输入路径中,从0000到部分19999有20,000个文件,每个文件大约64MB。 我想要做的是写一个hadoop流媒体作业,将这20,000个文件合并到10,000个文件中。

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

提前致谢!

1 个答案:

答案 0 :(得分:7)

现在看起来你有一个只有地图的流媒体工作。仅映射作业的行为是每个映射任务有一个输出文件。你无法改变这种行为。

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

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