我是靠谱客的博主 怕黑缘分,最近开发中收集的这篇文章主要介绍MapReduce job.setNumReduceTasks(0)思考一. 概述二. job.setNumReduceTasks(0)唯一影响的是map结果的输出方式三. 总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 一 概述
  • 二 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结果的输出方式三. 总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部