MapReduce job.setNumReduceTasks(0)思考
2016-01-26 10:21
134 查看
一 概述
二 jobsetNumReduceTasks0唯一影响的是map结果的输出方式
1 有 reduce
2 无 reduce
三 总结
在 /article/3724403.html 的最后曾经提到过,这里再详细探讨一下。
1. 如果有 reduce 阶段
map 的结果被 flush 到硬盘,作为 reduce 的输入;reduce 的结果将被 OutputFormat 的 RecordWriter 写到指定的地方(setOutputPath),作为整个程序的输出。
2. 如果没有 reduce 阶段
map 的结果将直接被 OutputFormat 的 RecordWriter 写到指定的地方(setOutputPath),作为整个程序的输出。
而 OutputFormat 可以是普通的 FileOutputFormat 等,也可以是一个空的 OutputFormat 如NullOutputFormat。
所以有无 reduce 和 OutputFormat 的多样性将组合出现以下情形(这个组合其实没什么意义,只是为了更加清楚而已)
reduce 的结果需要输出到文件,如采用 FileOutputFormat,需要 setOutputPath。
map 的结果需要输出到文件,如采用 FileOutputFormat,需要 setOutputPath。
如 NullOutputFormat 层面上 OutputFormat 的不需要指定 OutputPath;其他如 FileOutputFormat 需要指定,不然
二 jobsetNumReduceTasks0唯一影响的是map结果的输出方式
1 有 reduce
2 无 reduce
三 总结
一. 概述
本文转自 http://zy19982004.iteye.com/blog/2068112?utm_source=tuicool&utm_medium=referral在 /article/3724403.html 的最后曾经提到过,这里再详细探讨一下。
二. 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)
相关文章推荐
- 【IOS开发】高德地图定位坐标偏差
- Vector,ArrayList,LinkedList 的区别是什么?
- 深入理解Java内存模型
- c++中vector的用法详解
- STL vector用法介绍
- nginx自动切割访问日志
- PHP-学习笔记 延迟静态绑定
- 第 2 章 认识标签
- Spark编译报错问题日志记录
- 批量添加删除用户方法三
- 一个简单的BitTorrent客户端实现(二):种子文件解析及信息保存
- tcp连接超时处理
- Xcode7 模拟器安装app (转)
- Nginx + Apache 公用 80 端口的配置方案。
- 欢迎使用CSDN-markdown编辑器
- Android Notification
- angularjs使用gulp-uglify压缩后执行报错
- 如何构建用户画像
- UVA12563Jin Ge Jin Qu hao(01背包)
- 库克低调訪富士康:无欢迎仪式 坐便宜商务车