MapReduce在Map端的Combiner和在Reduce端的Partitioner
1.Map端的Combiner.
通过单词计数WordCountApp.java的例子,如何在Map端设置Combiner...
只附录部分代码:
1 /** 2 * 以文本 3 * hello you 4 * hello me 5 * 为例子. 6 * map方法调用了两次,因为有两行 7 * k2 v2 键值对的数量有几个? 8 * 有4个.有四个单词. 9 * 10 * 会产生几个分组? 11 * 产生3个分组. 12 * 有3个不同的单词. 13 * 14 */ 15 public class WordCountApp { 16 public static void main(String[] args) throws Exception { 17 //程序在这里运行,要有驱动. 18 Configuration conf = new Configuration(); 19 Job job = Job.getInstance(conf,WordCountApp.class.getSimpleName()); 20 21 //我们运行此程序通过运行jar包来执行.一定要有这句话. 22 job.setJarByClass(WordCountApp.class); 23 FileInputFormat.setInputPaths(job,args[0]); 24 25 job.setMapperClass(WordCountMapper.class);//设置Map类 26 job.setMapOutputKeyClass(Text.class);//设置Map的key 27 job.setMapOutputValueClass(LongWritable.class);//设置Map的value 28 29 job.setCombinerClass(WordCountReducer.class);//数据在Map端先进行 一次合并. 30 /* 31 这个setCombinerClass设置参数只能是一个继承了Reduce类的类.直接用我们定义的WordCountReducer. 32 在单词技术的例子中,Map端产生了四个键值对,两个hello,you和me各一个. 33 这样合并之后Map端最终只产生三个键值对. 34 这样在Reduce端也只处理三个键值对,而不是没有合并之前的四个. 35 这样Map端最终产生的键值对少了,Map端向Reduce端传递键值对占用的带宽就小.提高网络通信的速度. 36 Reduce端接受键值对的数量变少,就减少了Reduce端处理键值对所需要的时间. 37 以上就是Combiner的好处(在Map端对数据进行一次合并). 38 Map端的合并和Reduce端的合并是不能相互取代的. 39 在Map端进行的合并是局部合并,当前Map任务在它之中的合并. 40 各个Map任务之间还是会 有相同的数据的.这些相同的数据要到Reduce端进行合并. 41 */ 42 43 job.setReducerClass(WordCountReducer.class);//设置Reduce的类 44 job.setOutputKeyClass(Text.class);//设置Reduce的key Reduce这个地方只有输出的参数可以设置. 方法名字也没有Reduce关键字区别于Map 45 job.setOutputValueClass(LongWritable.class);//设置Reduce的value. 46 47 FileOutputFormat.setOutputPath(job, new Path(args[1])); 48 job.waitForCompletion(true);//表示结束了才退出,不结束不退出 49 }......................................................
2.Reduce端的Partitioner.
以流量统计TrafficCountApp.java的例子示例Reduce端设置Partitioner.
只附录部分代码:
1 public class TrafficApp { 2 public static void main(String[] args) throws Exception { 3 Job job = Job.getInstance(new Configuration(), TrafficApp.class.getSimpleName()); 4 job.setJarByClass(TrafficApp.class); 5 6 FileInputFormat.setInputPaths(job, args[0]); 7 8 job.setMapperClass(TrafficMapper.class); 9 job.setMapOutputKeyClass(Text.class); 10 job.setMapOutputValueClass(TrafficWritable.class); 11 12 job.setNumReduceTasks(2);//设定Reduce的数量为2 13 job.setPartitionerClass(TrafficPartitioner.class);//设定一个Partitioner的类. 14 /* 15 *Partitioner是如何实现不同的Map输出分配到不同的Reduce中? 16 *在不适用指定的Partitioner时,有 一个默认的Partitioner. 17 *就是HashPartitioner. 18 *其只有一行代码,其意思就是过来的key,不管是什么,模numberReduceTasks之后 返回值就是reduce任务的编号. 19 *numberReduceTasks的默认值是1. 任何一个数模1(取余数)都是0. 20 *这个地方0就是取编号为0的Reduce.(Reduce从0开始编号.) 21 */ 22 23 job.setReducerClass(TrafficReducer.class); 24 job.setOutputKeyClass(Text.class); 25 job.setOutputValueClass(TrafficWritable.class); 26 27 FileOutputFormat.setOutputPath(job, new Path(args[1])); 28 job.waitForCompletion(true); 29 } 30 31 public static class TrafficPartitioner extends Partitioner<Text,TrafficWritable>{//k2,v2 32 33 @Override 34 public int getPartition(Text key, TrafficWritable value,int numPartitions) { 35 long phoneNumber = Long.parseLong(key.toString()); 36 return (int)(phoneNumber%numPartitions); 37 } 38 39 }.................................................
//============附录MapReduce中Reduce使用默认的HashPartitioner进行分组的源代码==============
转载于:https://www.cnblogs.com/DreamDrive/p/5503456.html
MapReduce在Map端的Combiner和在Reduce端的Partitioner相关推荐
- MapReduce核心map reduce shuffle (spill sort partition merge)详解
Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.Shuffle的正常意思是洗牌或弄乱,可能大家更熟悉的是Java AP ...
- 【大数据day14】——MapReduce的运行机制详解(案列:Reduce 端实现 JOIN, Map端实现 JOIN,求共同好友)
文章目录 1 .MapReduce的运行机制详解 1.1:MapTask 工作机制 详细步骤 配置 1.2 :ReduceTask 工作机制 详细步骤 1.3:Shuffle 过程 2. 案例: Re ...
- BZip2Codec压缩、Map端压缩控制、Reduce端压缩控制……都在这份Hadoop整合压缩知识点里了!...
作者 | Tai_Park 责编 | Carol 来源 | CSDN 博客 封图 | CSDN付费下载于东方 IC 今天来聊聊 Hadoop 的压缩. 压缩:原始数据通过压缩手段产生目标数据,要求输入 ...
- MapReduce的map流程
看了许久的代码,把map的流程熟悉了下,不追求最准确的理解,记录下来以免忘记. 对于JobTracker和TaskTracker等大层面有控制和通讯的代码暂时不表 map过程俗气的先上一个图: map ...
- 第2节 mapreduce深入学习:15、reduce端的join算法的实现
reduce端的join算法: 例子: 商品表数据 product: pid p0001,小米5,1000,2000 p0002,锤子T1,1000,3000 订单表数据 order: ...
- 32查运行内存的map文件_Spark Shuffle调优之调节map端内存缓冲与reduce端内存占比
本文首先介绍Spark中的两个配置参数: spark.shuffle.file.buffer map端内存缓冲 spark.shuffle.memoryFraction reduce端内存占比 很多博 ...
- MapReduce之Map join操作
MapReduce之Map join操作(分布式缓存) 文章目录 MapReduce之Map join操作(分布式缓存) 案例结合 利用MapReduce中的setup方法与DistributedCa ...
- 运行wordcount的时候显示INFO mapreduce.Job: map 0% reduce 0%
错误提示: [xiaoqiu@s150 /home/xiaoqiu]$ hadoop jar wordcounter.jar com.cr.wordcount.WordcountApp hdfs:// ...
- 使用sqoop将数据从hdfs中导入mysql时,卡在INFO mapreduce.Job: map 100% reduce 0%的解决办法
最近在将hdfs中已经处理好的数据导入到mysql的时候遇到这么一个现象,当任务执行到 INFO mapreduce.Job: map 100% reduce 0% mapreduce任务卡在map1 ...
- 深入理解Spark 2.1 Core (十一):Shuffle Reduce 端的原理与源码分析
我们曾经在<深入理解Spark 2.1 Core (一):RDD的原理与源码分析 >讲解过: 为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RD ...
最新文章
- sublime text 3设置快捷键让html文件在浏览器打开
- mckinsey game
- spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序...
- sql left join用法_一张图看懂 SQL 的各种 join 用法!
- python 定时执行 爬虫 模块_浅析python实现scrapy定时执行爬虫
- Failed to start mongod.service: Unit not found
- 60-200-072-使用-命令-MySQL使用mysqldumpslow分析慢查询日志文件
- mysql审计插件安装_MySQL审计插件安装使用说明文档--升级版
- java 网络请求 生成本地图片
- java代码获取系统时间相差8小时
- mybatis开发神器mybatis plus
- 红米note4手机怎么屏幕录制视频
- Visual Studio 2015 TeamWork With TFS2015
- 失传万年的PS致富经典(六)
- 梦想cms-v1.4-后台存在任意文件读取漏洞
- deb文件怎么安装(deb文件怎么安装到Cydia)
- XMLHTTP的ReadyState与Statu详解
- Modbus的十大问题
- 数据运营时代,如何基于AnalyticDB构建企业实时数仓?
- 连接数据库出现java.lang.NullPointerException
热门文章
- springcloud 微服务鉴权_推荐 1w+ 星标的 SpringCloud 微服务项目,开发脚手架
- 如何提高python代码运行速度_一行代码让你的python运行速度提高100倍
- pb 执行insert 后return是否会自动提交_一条MySQL更新语句是怎么执行的?
- linux下安装配置laravel环境,linux下的laravel安装
- bootstracp实现树形列表_用 Python 实现一个网页下载工具
- ie型lfsr_什么是PRBS
- python中lstrip函数_python中strip(),lstrip(),rstrip()函数的使用讲解
- python中10none_Python中的None与Null(空字符)的区别
- [C#.Tips]也来谈谈接口欺诈
- 【数据结构之旅】循环队列