图解MapReduceMapReduce整体流程图
1.图解MapReduceMapReduce整体流程图
并行读取文本中的内容,然后进行MapReduce操作
Map过程:并行读取三行,对读取的单词进行map操作,每个词都以<key,value>形式生成
reduce操作是对map的结果进行排序,合并,最后得出词频。
2.简单过程:
MergeSort的过程(ps:2012-10-18)Map:
<Hello,1><World,1><Bye,1><World,1><Hello,1><Hadoop,1><Bye,1><Hadoop,1><Bye,1><Hadoop,1><Hello,1><Hadoop,1>
MergeSort:
- <Hello,1><World,1><Bye,1><World,1><Hello,1><Hadoop,1>
|
<Bye,1><Hadoop,1><Bye,1><Hadoop,1><Hello,1><Hadoop,1> - <Hello,1><World,1><Bye,1>
|| <World,1><Hello,1><Hadoop,1> |
<Bye,1><Hadoop,1><Bye,1> ||
<Hadoop,1><Hello,1><Hadoop,1> - <Hello,1><World,1>
||| <Bye,1> || <World,1><Hello,1> |||
<Hadoop,1> | <Bye,1><Hadoop,1> ||| <Bye,1> ||
<Hadoop,1><Hello,1> ||| <Hadoop,1> - MergeArray
结果:<Hello,1><World,1> ||| <Bye,1> ||
<Hello,1><World,1> ||| <Hadoop,1> |
<Bye,1><Hadoop,1> ||| <Bye,1> ||
<Hadoop,1><Hello,1> ||| <Hadoop,1> 在|||这一层级 - MergeArray
结果:<Bye,1><Hello,1><World,1> ||
<Hadoop,1><Hello,1><World,1> |
<Bye,1><Bye,1><Hadoop,1> ||
<Hadoop,1><Hadoop,1><Hello,1> 在||这一层级 - MergeArray
结
果:<Bye,1><Hadoop,1><Hello,1><World,1><Hello,1><World,1>
|
<Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hello,1><Hadoop,1>
在|这一层级 - MergeArray结
果:<Bye,1><Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hadoop,1><Hadoop,1><Hello,1><Hello,1><Hello,1><World,1><World,1>
排序完成
3.代码实例:
package cn.opensv.hadoop.ch1;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
/**
* Hello world!
*
*/
public class WordCount1 {
public static class Map extends Mapper<LongWritable, Text, Text, LongWritable> {
private final static LongWritable one = new LongWritable(1);
private Text word = new Text();
@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
public static class Reduce extends Reducer<Text, LongWritable, Text, LongWritable> {
@Override
public void reduce(Text key, Iterable<LongWritable> values, Context context)
throws IOException, InterruptedException {
long sum = 0;
for (LongWritable val : values) {
sum += val.get();
}
context.write(key, new LongWritable(sum));
}
}
public static void main(String[] args) throws Exception {
Configuration cfg = new Configuration();
Job job = new Job(cfg);
job.setJarByClass(WordCount1.class);
job.setJobName("wordcount1"); // 设置一个用户定义的job名称
job.setOutputKeyClass(Text.class); // 为job的输出数据设置Key类
job.setOutputValueClass(LongWritable.class); // 为job输出设置value类
job.setMapperClass(Map.class); // 为job设置Mapper类
job.setCombinerClass(Reduce.class); // 为job设置Combiner类
job.setReducerClass(Reduce.class); // 为job设置Reduce类
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);
}
}
图解MapReduceMapReduce整体流程图的更多相关文章
- FFplay源代码分析:整体流程图(仅供参考)
- 敏捷测试(8)--ATDD整体研发流程
ATDD整体研发流程 有了前面的基于story的敏捷基础,接下来来介绍一下验收测试驱动开发的整个流程. 名词解释: ATD,即验收测试设计(acceptancetest design) PM,即需求整 ...
- 图解Go语言内存分配
目录 基础概念 内存管理单元 内存管理组件 mcache mcentral mheap 内存分配流程 总结 参考资料 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理. ...
- Mybatis技术原理理——整体流程理解
前言:2018年,是最杂乱的一年!所以你看我的博客,是不是很空! 网上有很多关于Mybatis原理介绍的博文,这里介绍两篇我个人很推荐的博文 Mybatis3.4.x技术内幕和 MyBaits源码分析 ...
- [转帖]图解分布式一致性协议Paxos
图解分布式一致性协议Paxos https://www.cnblogs.com/hugb/p/8955505.html Paxos协议/算法是分布式系统中比较重要的协议,它有多重要呢? <分 ...
- 图解分布式一致性协议Paxos
Paxos协议/算法是分布式系统中比较重要的协议,它有多重要呢? <分布式系统的事务处理>: Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就 ...
- 64位CreateProcess逆向:(二)0环下参数的整合即创建进程的整体流程
转载:https://bbs.pediy.com/thread-207683.htm 点击下面进入总目录: 64位Windows创建64位进程逆向分析(总目录) 在上一篇文章中,我们介绍了Create ...
- [转]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- [总结]FFMPEG视音频编解码零基础学习方法--转
ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ...
随机推荐
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...
- 本博客弃用,请移步http://ningios.com查看最新
本博客弃用,请移步http://ningios.com查看最新
- Eclipse error:Access restriction
报错:Access restriction: The method decodeBuffer(String) from the type CharacterDecoder is not accessi ...
- “有箭头的视图”,即程序的Storyboard Entry Point。
设置方法很简单:打开StoryBoard文件,选中要设置为第一视图的ViewController,在右边工具栏勾选Is Initial View Controller就好了,此时你会看到ViewCon ...
- UIImage加载图片的区别和渲染模式
前言 关于本地图片UIImage的加载问题,还是需要注意的.不同的加载处理方式,在效率和性能上还是有差异的. 今天,我们来讲讲UIImage的加载应该选择什么样的API来加载! 两种API 这两种AP ...
- MySQL 基础 之 语句执行顺序
FORM: 对FROM的左边的表和右边的表计算笛卡尔积.产生虚表VT1 ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中. JOI ...
- JDK,TomCat安装配置
JDK.Tomcat.myEclipse安装配置 准备安装包 JAVA运行环境包 JDK1.7下载地址: http://www.veryhuo.com/down/html/43205.html Jsp ...
- WPF下YUV播放的D3D解决方案
http://blog.csdn.net/yangyy9611/article/details/17464133
- h5 如何打包apk
1.需要下载安装MyEclipse2014,Android SDK,eclipse(需配置Android开发环境) Java和Android环境安装与配置. 2.打开MyEclipse2014,新建一 ...
- android的编译和运行过程深入分析
android的编译和运行过程深入分析 作者: 字体:[增加 减小] 类型:转载 首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,此过程对了解android的编译和运 ...