use*_*439 1 java hadoop mapreduce
我有一份hadoop的工作.当工作被陈述时,我开始使用一些映射器.每个映射器都会将一些文件写入磁盘,例如part-m-00000,part-m-00001.据我所知,每个映射器创建一个零件文件.我有大量的数据,所以必须有多个映射器,但我可以以某种方式控制这个输出文件的数量?我的意思是,hadoop将启动,例如10个映射器,但是只有三个部分文件?
我发现这篇文章 如何在Hadoop中输出多个reducers只有一个part文件? 但是有使用旧版本的hadoop库.我正在使用org.apache.hadoop.mapreduce.*中的类,而不是来自org.apache.hadoop.mapred的类.*
我正在使用hadoop版本0.20和hadoop-core:1.2.0.jar
使用新的hadoop API有可能做到这一点吗?
如果没有减速器,则输出文件的数量等于减速器的数量或映射器的数量.
您可以向作业添加一个reducer,以便将所有映射器的输出定向到它,并获得单个输出文件.请注意,效率会降低,因为所有数据(映射器的输出)都将通过线路(网络IO)发送到减速器将运行的节点.此外,由于单个进程(最终)将获得所有数据,因此它可能会运行得更慢.
通过wat,有多个部分的事实不应该非常重要,因为您可以将包含它们的目录传递给后续作业