概述
- 一 概述
- 二 jobsetNumReduceTasks0唯一影响的是map结果的输出方式
- 1 有 reduce
- 2 无 reduce
- 三 总结
一. 概述
本文转自 http://zy19982004.iteye.com/blog/2068112?utm_source=tuicool&utm_medium=referral
在 http://zy19982004.iteye.com/blog/2037549 的最后曾经提到过,这里再详细探讨一下。
二. job.setNumReduceTasks(0)唯一影响的是map结果的输出方式
当 job.setNumReduceTasks(0) 时,即没有 reduce 阶段,此时唯一影响的就是 map 结果的输出方式
1. 如果有 reduce 阶段
map 的结果被 flush 到硬盘,作为 reduce 的输入;reduce 的结果将被 OutputFormat 的 RecordWriter 写到指定的地方(setOutputPath),作为整个程序的输出。
2. 如果没有 reduce 阶段
map 的结果将直接被 OutputFormat 的 RecordWriter 写到指定的地方(setOutputPath),作为整个程序的输出。
而 OutputFormat 可以是普通的 FileOutputFormat 等,也可以是一个空的 OutputFormat 如NullOutputFormat。
所以有无 reduce 和 OutputFormat 的多样性将组合出现以下情形(这个组合其实没什么意义,只是为了更加清楚而已)
2.1 有 reduce
reduce 的结果不需要输出到文件,如 reduce 里直接将结果插入 HBase,此时可以采用 NullOutputFormat,当然就不需要 setOutputPath。
reduce 的结果需要输出到文件,如采用 FileOutputFormat,需要 setOutputPath。
2.2 无 reduce
map 的结果需要不输出到文件,如 map 里直接将结果插入 HBase,此时可以采用 NullOutputFormat,当然就不需要 setOutputPath。
map 的结果需要输出到文件,如采用 FileOutputFormat,需要 setOutputPath。
三. 总结
有无 reduce 决定 map 结果的输出方式。有 reduce 时,reduce 的结果作为整个程序的输出;无 reduce时,map 的结果作为整个程序的输出。如果能在 map 阶段解决的问题尽量不要丢给直接输出的 reduce 如 IdentityReducer。
如 NullOutputFormat 层面上 OutputFormat 的不需要指定 OutputPath;其他如 FileOutputFormat 需要指定,不然
Exception in thread "main" org.apache.hadoop.mapred.InvalidJobConfException: Output directory not set.
at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:138)
最后
以上就是怕黑缘分为你收集整理的MapReduce job.setNumReduceTasks(0)思考一. 概述二. job.setNumReduceTasks(0)唯一影响的是map结果的输出方式三. 总结的全部内容,希望文章能够帮你解决MapReduce job.setNumReduceTasks(0)思考一. 概述二. job.setNumReduceTasks(0)唯一影响的是map结果的输出方式三. 总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复