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