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

e3bfsja2  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(568)

详情如下:
输入文件位于hdfs路径中 /user/rd/input ,hdfs输出路径为 /user/rd/output 在输入路径中,有20000个文件从part-00000到part-19999,每个文件大约64mb。我想做的是编写一个hadoop流作业,将这20000个文件合并成10000个文件。
有没有办法使用hadoop流媒体作业将这20000个文件合并成10000个文件?或者,换句话说,有没有办法控制hadoop流输出文件的数量?
提前谢谢!

2jcobegt

2jcobegt1#

看起来你现在有一个Map流的工作。仅Map作业的行为是每个Map任务有一个输出文件。对于改变这种行为你无能为力。
您可以通过添加reduce阶段来利用mapreduce的工作方式,这样它就有10000个reducer。然后,每个reducer将输出一个文件,这样就剩下10000个文件。请注意,您的数据记录将“分散”在10000。。。不仅仅是两个文件连接在一起。为此,请使用 -D mapred.reduce.tasks=10000 命令行参数中的标志。
这可能是默认行为,但也可以将identity reducer指定为reducer。这只会传递记录,我想这就是你想要的。使用此标志执行以下操作: -reducer org.apache.hadoop.mapred.lib.IdentityReducer

相关问题