WordCount编程及执行流程
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编程及执行流程相关推荐
- 【大数据开发】SparkCore——Spark作业执行流程、RDD编程的两种方式、简单算子
文章目录 一.Spark作业执行流程(重点) 二.RDD编程 2.1创建RDD的⼆种⽅式: 2.2Transformation算⼦ 2.3Action算子 三.简单算子(必须掌握) 3.1 map.m ...
- 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程
基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...
- 追源索骥:透过源码看懂Flink核心框架的执行流程
https://www.cnblogs.com/bethunebtj/p/9168274.html 追源索骥:透过源码看懂Flink核心框架的执行流程 前言 1.从 Hello,World WordC ...
- MapReduce的执行流程
1.mapreduce原理 1.1.序列化和反序列化 (1)序列化:将内存的对象转换成字节序列,便于存储 (2)反序列化:将收到的字节序列或硬盘的持久化数据,转换成内存. 1.2.inputforma ...
- 追源索骥:透过源码看懂Flink核心框架的执行流程--来自GitHub
追源索骥:透过源码看懂Flink核心框架的执行流程 联系qq2499496272可进行删除,需要文件版本的私聊!!~ 文章目录 追源索骥:透过源码看懂Flink核心框架的执行流程 前言 1.从 ~~H ...
- Python黑帽编程2.4 流程控制
Python黑帽编程2.4 流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if -..else 先上一段代码: #!/usr/bin/python # - ...
- MyBatis 的执行流程,写得太好了!
来源 | blog.csdn.net/zwx900102/article/details/108455514 MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清 ...
- scala语言的底层是java实现的_Scala学习笔记一(与Java、Jvm的关系以及程序执行流程分析)...
一.Scala语言与Java.Jvm的关系分析 Scala语言是马丁奥德斯基接触Java语言后,针对Java语言的特点,将函数式编程语言的特点融合到Java中,由此发明的.Scala语言和Java语言 ...
- openresty开发系列31--openresty执行流程
openresty开发系列31--openresty执行流程 我们先看个例子 location /test { set $a 32; echo $a; set $a 56; ...
最新文章
- 学习java 的30个目标
- datatable 创建列赋值_DataTable创建行和列,DataReader读取
- 计算机进管理提示找不到入口,win10系统开机提示xxxdll模块已加载但找不到入口点的教程...
- 性能计数器驱动_【Nature Sustainability】机械力驱动的摩擦电高效空气负离子发生器...
- android 字典转json,在Swift中将字典转换为JSON
- 魔兽世界总是显示无法连接服务器,心得:launcher更新无法连接服务器如何解决...
- Java架构师面试题系列之Dubbo面试专题(29题,含详细答案解析)
- 禁用oracle的默认账户,Oracle EBS默认的账户
- android中注册代码怎么写,Android P HIDL demo代码编写 (原创)
- 职业计算机试题,职业高中计算机专业综合练习试题一
- listary文件查找程序下载和使用
- 数据质量六大评价标准
- python编程入门到实践第二章_《Python编程:从入门到实践》第二章 变量和简单数据类型 习题答案...
- 用Python物理建模的第一本书终于来啦
- 网络架构及其演变过程
- leetcode 714. 买卖股票的时机含手续费 python
- Android studio语音识别集成科大讯飞语音转文字
- 微信小程序iBeacon获取问题(wx.onBeaconUpdate不执行)【已解决】
- 计算机网络之物理层-频带传输
- linux nvcc未找到命令,打印本页 - nvcc命令无法识别