MapReduce程序分为三部分: map       reduce        driver

这里先放出最经典的wordcount程序源码:

public class WordCount extends Configured  implements  Tool{

//map

public static class WordCountMap extends Mapper<LongWritable, Text, Text, IntWritable>{
     private Text MapoutputKey=new Text();
     private final static IntWritable MapoutputValue=new IntWritable(1); 
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
//得到value
String lineValue=value.toString();
//split
StringTokenizer stringTokenizer=new StringTokenizer(lineValue);
//迭代取出数据
while(stringTokenizer.hasMoreTokens()){
//得到输入的value
String wordValue=stringTokenizer.nextToken();
MapoutputKey.set(wordValue);
//输出
context.write(MapoutputKey, MapoutputValue);
}
}

}

//reduce
      public static class WordCountReduce extends Reducer<Text, IntWritable, Text, IntWritable>{
      private IntWritable outputValue=new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> values,
Context context)
throws IOException, InterruptedException {
  int sum=0;
  for(IntWritable value:values){
sum+=value.get();
  }
  outputValue.set(sum);
  //输出
  context.write(key, outputValue);
}
}

//driver
public int run(String[] args) throws Exception{
//得到配置信息
Configuration configurable=getConf();
//创建Job
Job job=Job.getInstance(configurable,this.getClass().getSimpleName());
//运行jar
job.setJarByClass(this.getClass());
//设置job
//1. input
Path inPath=new Path(args[0]);
FileInputFormat.addInputPath(job, inPath);
//2.map
job.setMapperClass(WordCountMap.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
//3.reduce
job.setReducerClass(WordCountReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//4.output
Path outPath=new Path(args[1]);
FileOutputFormat.setOutputPath(job, outPath);
//提交job
boolean completion = job.waitForCompletion(true);

return completion ? 0 : 1;
}
public static void main(String[] args) throws Exception{
//得到配置信息
Configuration configurable=new Configuration();
//int status=new WordCount().run(args);
int status=ToolRunner.run(configurable, new WordCount(), args);
System.exit(status);
}
}

这个wordcount程序可以在本地或者yarn上运行,首先要在eclipse中打成jar包,当然上边的代码要想直接运行,需要在maven中加入hadoop的jar包坐标,然后自动下载到本地仓库才可以,打包好后就跟hadoop中自带的wordcount程序运行过程一样,这里不进行细说,如果打包到运行测试有问题可以在文章末尾留言

wordcount执行流程:

input---->map-----reduce------output

input:

会文件按行分割形成<key,value>对,如下图所示:

这一步由Mapreduce框架自动完成,其中key是偏移量,包含了回车所占的字符数,value是这一行的数据

map:

将分割好的<key,value>对交给用户定义的map方法处理,形成新的<key,value>对,如下图所示:

得到map方法输出的<key,value>对后,Mapper会将他们按照key值进行排序,得到Mapper的最终输出结果,如下图:

reduce:

Reducer先对从Mapper接受的<key,value>对进行shuffle处理,如下图:

然后再交给用户自定义的reduce方法进行合并处理,再得到新的<key,value>对,如下图:

最后将这个<key,value>对作为wordcount的结果输出

中,

WordCount编程及执行流程相关推荐

  1. 【大数据开发】SparkCore——Spark作业执行流程、RDD编程的两种方式、简单算子

    文章目录 一.Spark作业执行流程(重点) 二.RDD编程 2.1创建RDD的⼆种⽅式: 2.2Transformation算⼦ 2.3Action算子 三.简单算子(必须掌握) 3.1 map.m ...

  2. 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程

    基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...

  3. 追源索骥:透过源码看懂Flink核心框架的执行流程

    https://www.cnblogs.com/bethunebtj/p/9168274.html 追源索骥:透过源码看懂Flink核心框架的执行流程 前言 1.从 Hello,World WordC ...

  4. MapReduce的执行流程

    1.mapreduce原理 1.1.序列化和反序列化 (1)序列化:将内存的对象转换成字节序列,便于存储 (2)反序列化:将收到的字节序列或硬盘的持久化数据,转换成内存. 1.2.inputforma ...

  5. 追源索骥:透过源码看懂Flink核心框架的执行流程--来自GitHub

    追源索骥:透过源码看懂Flink核心框架的执行流程 联系qq2499496272可进行删除,需要文件版本的私聊!!~ 文章目录 追源索骥:透过源码看懂Flink核心框架的执行流程 前言 1.从 ~~H ...

  6. Python黑帽编程2.4 流程控制

    Python黑帽编程2.4  流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if -..else 先上一段代码: #!/usr/bin/python # - ...

  7. MyBatis 的执行流程,写得太好了!

    来源 | blog.csdn.net/zwx900102/article/details/108455514 MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清 ...

  8. scala语言的底层是java实现的_Scala学习笔记一(与Java、Jvm的关系以及程序执行流程分析)...

    一.Scala语言与Java.Jvm的关系分析 Scala语言是马丁奥德斯基接触Java语言后,针对Java语言的特点,将函数式编程语言的特点融合到Java中,由此发明的.Scala语言和Java语言 ...

  9. openresty开发系列31--openresty执行流程

    openresty开发系列31--openresty执行流程 我们先看个例子 location /test {     set $a 32;     echo $a;     set $a 56;   ...

最新文章

  1. 学习java 的30个目标
  2. datatable 创建列赋值_DataTable创建行和列,DataReader读取
  3. 计算机进管理提示找不到入口,win10系统开机提示xxxdll模块已加载但找不到入口点的教程...
  4. 性能计数器驱动_【Nature Sustainability】机械力驱动的摩擦电高效空气负离子发生器...
  5. android 字典转json,在Swift中将字典转换为JSON
  6. 魔兽世界总是显示无法连接服务器,心得:launcher更新无法连接服务器如何解决...
  7. Java架构师面试题系列之Dubbo面试专题(29题,含详细答案解析)
  8. 禁用oracle的默认账户,Oracle EBS默认的账户
  9. android中注册代码怎么写,Android P HIDL demo代码编写 (原创)
  10. 职业计算机试题,职业高中计算机专业综合练习试题一
  11. listary文件查找程序下载和使用
  12. 数据质量六大评价标准
  13. python编程入门到实践第二章_《Python编程:从入门到实践》第二章 变量和简单数据类型 习题答案...
  14. 用Python物理建模的第一本书终于来啦
  15. 网络架构及其演变过程
  16. leetcode 714. 买卖股票的时机含手续费 python
  17. Android studio语音识别集成科大讯飞语音转文字
  18. 微信小程序iBeacon获取问题(wx.onBeaconUpdate不执行)【已解决】
  19. 计算机网络之物理层-频带传输
  20. linux nvcc未找到命令,打印本页 - nvcc命令无法识别

热门文章

  1. 解决vscode远程连接服务器的Extension activation failed问题
  2. 瓶颈在谁?论CPU和显卡的合理搭配
  3. PBX俗称:程控交换机
  4. 故障排查 ❀ 路由器接口故障排除与解析
  5. 服务发现Discovery
  6. c语言中gets()的详细用法
  7. 能量守恒(能量是怎么来的)
  8. Studio One6完整兼容版音频数字音乐工作站DAW
  9. 【Python黑帽子】——简易的ZIP文件密码破解器
  10. 诺基亚java游戏那种_非诺基亚手机如何玩S40 Java游戏_网易手机频道