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

Cha*_*Lin 3 hadoop hadoop-streaming

这是详细信息:

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

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

提前致谢!

Don*_*ner 7

现在看起来你有一个只有地图的流媒体工作.仅映射作业的行为是每个映射任务具有一个输出文件.您无法更改此行为.

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

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