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相关推荐

  1. MapReduce核心map reduce shuffle (spill sort partition merge)详解

    Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.Shuffle的正常意思是洗牌或弄乱,可能大家更熟悉的是Java AP ...

  2. 【大数据day14】——MapReduce的运行机制详解(案列:Reduce 端实现 JOIN, Map端实现 JOIN,求共同好友)

    文章目录 1 .MapReduce的运行机制详解 1.1:MapTask 工作机制 详细步骤 配置 1.2 :ReduceTask 工作机制 详细步骤 1.3:Shuffle 过程 2. 案例: Re ...

  3. BZip2Codec压缩、Map端压缩控制、Reduce端压缩控制……都在这份Hadoop整合压缩知识点里了!...

    作者 | Tai_Park 责编 | Carol 来源 | CSDN 博客 封图 | CSDN付费下载于东方 IC 今天来聊聊 Hadoop 的压缩. 压缩:原始数据通过压缩手段产生目标数据,要求输入 ...

  4. MapReduce的map流程

    看了许久的代码,把map的流程熟悉了下,不追求最准确的理解,记录下来以免忘记. 对于JobTracker和TaskTracker等大层面有控制和通讯的代码暂时不表 map过程俗气的先上一个图: map ...

  5. 第2节 mapreduce深入学习:15、reduce端的join算法的实现

    reduce端的join算法: 例子: 商品表数据 product:  pid p0001,小米5,1000,2000 p0002,锤子T1,1000,3000 订单表数据 order:        ...

  6. 32查运行内存的map文件_Spark Shuffle调优之调节map端内存缓冲与reduce端内存占比

    本文首先介绍Spark中的两个配置参数: spark.shuffle.file.buffer map端内存缓冲 spark.shuffle.memoryFraction reduce端内存占比 很多博 ...

  7. MapReduce之Map join操作

    MapReduce之Map join操作(分布式缓存) 文章目录 MapReduce之Map join操作(分布式缓存) 案例结合 利用MapReduce中的setup方法与DistributedCa ...

  8. 运行wordcount的时候显示INFO mapreduce.Job: map 0% reduce 0%

    错误提示: [xiaoqiu@s150 /home/xiaoqiu]$ hadoop jar wordcounter.jar com.cr.wordcount.WordcountApp hdfs:// ...

  9. 使用sqoop将数据从hdfs中导入mysql时,卡在INFO mapreduce.Job: map 100% reduce 0%的解决办法

    最近在将hdfs中已经处理好的数据导入到mysql的时候遇到这么一个现象,当任务执行到 INFO mapreduce.Job: map 100% reduce 0% mapreduce任务卡在map1 ...

  10. 深入理解Spark 2.1 Core (十一):Shuffle Reduce 端的原理与源码分析

    我们曾经在<深入理解Spark 2.1 Core (一):RDD的原理与源码分析 >讲解过: 为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RD ...

最新文章

  1. sublime text 3设置快捷键让html文件在浏览器打开
  2. mckinsey game
  3. spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序...
  4. sql left join用法_一张图看懂 SQL 的各种 join 用法!
  5. python 定时执行 爬虫 模块_浅析python实现scrapy定时执行爬虫
  6. Failed to start mongod.service: Unit not found
  7. 60-200-072-使用-命令-MySQL使用mysqldumpslow分析慢查询日志文件
  8. mysql审计插件安装_MySQL审计插件安装使用说明文档--升级版
  9. java 网络请求 生成本地图片
  10. java代码获取系统时间相差8小时
  11. mybatis开发神器mybatis plus
  12. 红米note4手机怎么屏幕录制视频
  13. Visual Studio 2015 TeamWork With TFS2015
  14. 失传万年的PS致富经典(六)
  15. 梦想cms-v1.4-后台存在任意文件读取漏洞
  16. deb文件怎么安装(deb文件怎么安装到Cydia)
  17. XMLHTTP的ReadyState与Statu详解
  18. Modbus的十大问题
  19. 数据运营时代,如何基于AnalyticDB构建企业实时数仓?
  20. 连接数据库出现java.lang.NullPointerException

热门文章

  1. springcloud 微服务鉴权_推荐 1w+ 星标的 SpringCloud 微服务项目,开发脚手架
  2. 如何提高python代码运行速度_一行代码让你的python运行速度提高100倍
  3. pb 执行insert 后return是否会自动提交_一条MySQL更新语句是怎么执行的?
  4. linux下安装配置laravel环境,linux下的laravel安装
  5. bootstracp实现树形列表_用 Python 实现一个网页下载工具
  6. ie型lfsr_什么是PRBS
  7. python中lstrip函数_python中strip(),lstrip(),rstrip()函数的使用讲解
  8. python中10none_Python中的None与Null(空字符)的区别
  9. [C#.Tips]也来谈谈接口欺诈
  10. 【数据结构之旅】循环队列