Map-Reduce框架的运作完全基于<key,value>对,即数据的输入是一批<key,value>对,生成的结果也是一批<key,value>对,只是有时候它们的类型不一样而已。Key和value的类由于需要支持被序列化(serialize)操作,所以它们必须要实现Writable接口,而且key的类还必须实现WritableComparable接口,使得可以让框架对数据集的执行排序操作。

一个Map-Reduce任务的执行过程以及数据输入输出的类型如下所示:

(input)<k1,v1> -> map -> <k2,v2> -> combine -> <k2,v2> -> reduce -> <k3,v3>(output)

下面通过一个的例子并结合源代码来详细说明这个过程 
3.1       WordCount示例

这也是Hadoop自带的一个例子,目标是统计文本文件中单词的个数。

假设有如下的两个文本文件来运行WorkCount程序:

Hello World Bye World

Hello Hadoop GoodBye Hadoop

3.2  map数据输入

Hadoop针对文本文件缺省使用LineRecordReader类来实现读取,一行一个key/value对,key取偏移量,value为行内容。

如下是map1的输入数据: 
Key1 Value1 
0 Hello World Bye World

如下是map2的输入数据: 
Key1 Value1 
0 Hello Hadoop GoodBye Hadoop

3.3  map输出/combine输入

如下是map1的输出结果 
Key2 Value2 
Hello 1 
World 1 
Bye 1 
World 1

如下是map2的输出结果 
Key2 Value2 
Hello 1 
Hadoop 1 
GoodBye 1 
Hadoop 1 
3.4    combine输出

Combiner类实现将相同key的值合并起来,它也是一个Reducer的实现。

如下是combine1的输出 
Key2 Value2 
Hello 1 
World 2 
Bye 1

如下是combine2的输出 
Key2 Value2 
Hello 1 
Hadoop 2 
GoodBye 1 
3.5    reduce输出

Reducer类实现将相同key的值合并起来。

如下是reduce的输出 
Key2 Value2 
Hello 2 
World 2 
Bye 1 
Hadoop 2 
GoodBye 1

即实现了WordCount的处理

MapReduce工作原理(简单实例)的更多相关文章

  1. MapReduce工作原理讲解

    第一部分:MapReduce工作原理 MapReduce 角色•Client :作业提交发起者.•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业.•TaskT ...

  2. MapReduce工作原理

    第一部分:MapReduce工作原理   MapReduce 角色•Client :作业提交发起者.•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业.•Tas ...

  3. MapReduce工作原理图文详解 (炼数成金)

    MapReduce工作原理图文详解 1.Map-Reduce 工作机制剖析图: 1.首先,第一步,我们先编写好我们的map-reduce程序,然后在一个client 节点里面进行提交.(一般来说可以在 ...

  4. [转载] MapReduce工作原理讲解

    转载自http://www.aboutyun.com/thread-6723-1-1.html 有时候我们在用,但是却不知道为什么.就像苹果砸到我们头上,这或许已经是很自然的事情了,但是牛顿却发现了地 ...

  5. Hadoop MapReduce工作原理

    在学习Hadoop,慢慢的从使用到原理,逐层的深入吧 第一部分:MapReduce工作原理   MapReduce 角色 •Client :作业提交发起者. •JobTracker: 初始化作业,分配 ...

  6. Webservice工作原理及实例

    Web Service工作原理及实例   一.Web Service基本概念   Web Service也叫XML Web Service WebService是一种可以接收从Internet或者In ...

  7. <转>MapReduce工作原理图文详解

    转自 http://weixiaolu.iteye.com/blog/1474172前言:  前段时间我们云计算团队一起学习了hadoop相关的知识,大家都积极地做了.学了很多东西,收获颇丰.可是开学 ...

  8. MapReduce工作原理详解

    文章概览: 1.MapReduce简介 2.MapReduce有哪些角色?各自的作用是什么? 3.MapReduce程序执行流程 4.MapReduce工作原理 5.MapReduce中Shuffle ...

  9. MapReduce工作原理图文详解

    目录:1.MapReduce作业运行流程2.Map.Reduce任务中Shuffle和排序的过程 1.MapReduce作业运行流程 流程示意图: 流程分析: 1.在客户端启动一个作业. 2.向Job ...

  10. Wordpress解析系列之PHP编写hook钩子原理简单实例

    Wordpress作为全球应用最广泛的个人博客建站工具,有很多的技术架构值得我们学习推敲.其中,最著名最经典的编码技术架构就是采用了hook的机制. hook翻译成中文是钩子的意思,单独看这个词我们难 ...

随机推荐

  1. 第八篇:Spark SQL Catalyst源码分析之UDF

    /** Spark SQL源码分析系列文章*/ 在SQL的世界里,除了官方提供的常用的处理函数之外,一般都会提供可扩展的对外自定义函数接口,这已经成为一种事实的标准. 在前面Spark SQL源码分析 ...

  2. CBT怎样进行注册

    CBT币未来升值千倍?揭秘为何比特云币注册认证送矿机? 比特云币先机先机,1月6号准备启动,虚拟货币新宠云比特(Cloud Bit 简称CBT)将于近日强势登陆交易市场.这款由全球最大的比特矿工联盟发 ...

  3. (asp.net)百度浏览器Cookie的神奇bug

    HttpCookie cookie = new HttpCookie("version"); cookie.Value = "1.1"; cookie.Expi ...

  4. Flutter新手第一个坑:Could not find com.android.tools.lint:lint-gradle:26.1.1.

    解决方法1:修改build.gradle,注释掉jcenter(),google().使用阿里的镜像.原因是jcenter google库无法访问到导致的问题.虽然我有万能的爬墙工具,开启全局代理依然 ...

  5. [spring]xml配置文件中的"classpath:"与"classpath*:"的区别

    <bean id="sessionFactorySaas" class="org.mybatis.spring.SqlSessionFactoryBean" ...

  6. HDU-4705-树形dp/组合数学

    Y Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submiss ...

  7. HDU 4665 Mutiples on a circle (圆环DP)

    题意 N个数的圆环上有多少种方案可以使得选出来的一段数是K的倍数(N<=50000, K<=200, a[i]<=1000). 思路 多校第七场1004.圆上的DP--大脑太简单处理 ...

  8. vue router使用query和params传参的使用

    传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,希望可以帮到大家. Vue ...

  9. 使用libimobiledevice + ifuse提取iOS沙盒文件

    简介 libimobiledevice:一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备. Git仓库: https://github.com/libimobiled ...

  10. Unity 3D插入MySql中文无法显示问题

    使用Unity3D向mySql中插入数据,然后进入mySql查看数据库,吓我一跳中文全部乱码. 随后各种查阅资料,网站上给出解释,MySql应该使用utf8编码,查看我的mySql默认是使用utf8编 ...