什么是MapReduce?

你想数出一摞牌中有多少张黑桃。直观方式是一张一张检查而且数出有多少张是黑桃。

MapReduce方法则是:

1. 给在座的全部玩家中分配这摞牌。

2. 让每一个玩家数自己手中的牌有几张是黑桃,然后把这个数目汇报给你。

3. 你把全部玩家告诉你的数字加起来,得到最后的结论。

MapReduce概述

MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。

它的核心设计理念是移动计算。而不是移动数据。

MapReduce合并了两种经典函数:

映射( Mapping)对集合里的每一个目标应用同一个操作。即。假设你想把表单里每一个单元格乘以二,那么把这个函数单独地应用在每一个单元格上的操作就属于mapping。

化简( Reducing )遍历集合中的元素来返回一个综合的结果。

即。输出表单里一列数字的和这个任务属于reducing。



MapReduce由两个阶段组成: Map和Reduce,用户仅仅须要实现map()和reduce()两个函数。就可以实现分布式计算。很easy。

这两个函数的形參是key、 value对,表示函数的输入信息。

MapReduce在多于10PB数据时趋向于变慢。

Mapreduce原理

运行步骤:

1. map任务处理

1.1 读取输入文件内容,解析成key、 value对。 对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。

1.2 写自己的逻辑,对输入的key、 value进行处理,转换成新的key、 value输出。

1.3 对输出的key、 value进行分区。

1.4 对不同分区的数据,依照key**进行排序、分组**。

同样key的value放到一个集合中。

1.5 (可选)分组后的数据进行归约。

2.reduce任务处理

2.1 对多个map任务的输出,依照不同的分区,通过网络copy到不同的reduce节点。



2.2 对多个map任务的输出进行合并、排序。 写reduce函数自己的逻辑。对输入的key、 values处理,转换成新的key、 value输出。

2.3 把reduce的输出保存到文件里。

MR工作流程

1)作业配置

1、编写Map和Reduce处理函数

2、配置输入输出路径

3、其它配置,如输出压缩等

2)提交作业

1、向JobTracker请求。getNewJobId()

2、检查job的相关愉出路径,提交job以及相关的jar到JobTracker,

相关的libjars是通过distributedCache方式传递到JobTracker。

3、JobClient计算输入分片。把splitMetainInfo写入JobSplit。

4、把job.xml配置文件发送到JobTracker。

5、调用JobSubmissionProtocol的submitjob方法真正去提交作业。

3)作业初始化

1、JobTracker接收到Client的submitJob()方法调用后,会把调用放到内部队列中,交由TaskScheduler调度。

2、创建一个代表正在运行作业的对象JoblnProgress。

3、JoblnProgress的initTasks()方法的初始化工作:

A.读取作业的分片信息

B.创建Map任务与Reduce任务,为每一个Map Task和Reduce Task生成TasklnProgress对象。

C.reduce的数最由mapred.reduce.tasks属性决定。而map的数量是由输入分片的个数决定的。

4、任务分配

1、JobTracker与TaskTracker之间的通信与任务分配是通过心跳机制完毕的。

2、TaskTracker会主动向JobTracker询问是否有作业。假设自己有空暇的slot,就能够在心跳阶段得到JobTracker发送过来的Map任务或Reduce任务。

3、TaskTracker->transmitHeatBeat。

4、拷贝全部信息到本地(代码。配置信息。数据分片)。

5、任务运行

申请到任务后,TaskTracker须要做例如以下事情:

1、拷贝代码到本地。

2)拷贝任务信息到本地。

3)启动JVM运行任务。

A.代码能够查看 TaskTracker->startNewTask->localizeJob。然后调用launchTaskForJob启动taskrunner去运行task。

B.TaskRunner分为MapTaskRunner和ReduceTaskRunner。

6、进度和状态更新

1、Task在运行过程中.把自己的状态发送给TaskTracker。由TaskTracker再汇报给JobTracker。

2、任务进度是通过计数器实现的。

7、作业完毕

1、JobTracker在接收到最后一个任务完毕后,才会将任务标志成成功状态。

2、同一时候会运行把中间结果后删除等操作。

Hadoop2.6.0源代码作业提交流程

MapReduce新旧API对照

1、新的API倾向于使用抽象类,而不是接口。由于这更easy扩展,能够加入一个方法(用默认的实现)到一个抽象类,而不需改动类之前的实现方法。在新的API中,Mapper和Reducer都是抽象类。

2、新的API是在org.apache.hadoop.mapreduce包(和子包)中的。之前版本号的API则是放在org.apache.hadcop.mapred中的。

3、新的API广泛使用context.object(上下文对象),并同意用户代码与MapReduce系统进行通信。比如,MapContext基本上充当着JobConf的OutputCollector和Reporter的角色

4、新的API统一了配置

的API有一个特殊的JobConf对象用于作业配置,这是一个对于Hadoop通常的Configuration对象的扩展。在新的API中,这样的差别没有了。全部作业配置通过Configuration来完毕。作业控制的运行由Job类来负责。而不是JobClient。它在新的API中已经荡然无存。

MapReduce简述、工作流程及新旧API对照的更多相关文章

  1. Hadoop日记Day15---MapReduce新旧api的比较

    我使用hadoop的是hadoop1.1.2,而很多公司也在使用hadoop0.2x版本,因此市面上的hadoop资料版本不一,为了扩充自己的知识面,MapReduce的新旧api进行了比较研究. h ...

  2. MapReduce的工作流程

    MapReduce的工作流程 1.客户端将每个block块切片(逻辑切分),每个切片都对应一个map任务,默认一个block块对应一个切片和一个map任务,split包含的信息:分片的元数据信息,包含 ...

  3. Hadoop2.2编程:新旧API的区别

    Hadoop最新版本的MapReduce Release 0.20.0的API包括了一个全新的Mapreduce JAVA API,有时候也称为上下文对象. 新的API类型上不兼容以前的API,所以, ...

  4. mapreduce新旧api对比

    对比:hadoop版本1.x 新版,hadoop版本0.x 旧版 1.新api引用包一般是mapreduce ,旧版api引用的包一般是mapred 2.新api使用Job,旧版api使用JobCon ...

  5. MultipleOutputs新旧api

    package MRNB_V4; import java.io.IOException; import java.util.Iterator; import org.apache.hadoop.con ...

  6. Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)

    我们知道,如果想要在Yarn上运行MapReduce作业,仅需实现一个ApplicationMaster组件即可,而MRAppMaster正是MapReduce在Yarn上ApplicationMas ...

  7. MapReduce与Yarn 的详细工作流程分析

    MapReduce详细工作流程之Map阶段 如上图所示 首先有一个200M的待处理文件 切片:在客户端提交之前,根据参数配置,进行任务规划,将文件按128M每块进行切片 提交:提交可以提交到本地工作环 ...

  8. MapReduce工作流程及Shuffle原理概述

    引言: 虽然MapReduce计算框架简化了分布式程序设计,将所有的并行程序均需要关注的设计细节抽象成公共模块并交由系统实现,用户只需关注自己的应用程序的逻辑实现,提高了开发效率,但是开发如果对Map ...

  9. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

随机推荐

  1. HDU-4417 Super Mario,划分树+二分!

    Super Mario 这个题也做了一天,思路是很清晰,不过二分那里写残了,然后又是无限RE.. 题意:就是查询区间不大于k的数的个数. 思路:裸划分树+二分答案.将区间长度作为二分范围.这个是重点. ...

  2. redis中redis.conf配置文件

    redis.conf文件配置解释 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize yes 2. 当Redis以守护进程方式运行时,Red ...

  3. BZOJ 1260: [CQOI2007]涂色paint【区间DP】

    Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...

  4. BZOJ2337 [HNOI2011]XOR和路径 【概率dp + 高斯消元】

    题目 题解 突然get到这样路径期望的题目八成是高斯消元 因为路径上的dp往往具有后效性,这就形成了一个方程组 对于本题来说,直接对权值dp很难找到突破口 但是由于异或是位独立的,我们考虑求出每一位的 ...

  5. 关于parseDouble用法

    1.JAVA中的compareTo方法和strcmp完全类似,你可以使用 if(greeting.compareTo("help")==0).....或者用s.quals(t)来判 ...

  6. linux文件夹作用

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...

  7. 多语言业务错误日志收集监控工具Sentry 安装与使用

    Sentry 是一个实时事件日志记录和汇集的平台.其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈. Sentry是一个日志平台, 它分为客户端和服务端,客户端(目前客户端有Pyt ...

  8. hzwer与逆序对

    codevs——4163 hzwer与逆序对 貌似这个题和上个题是一样的((⊙o⊙)…)  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目 ...

  9. 51 NOD 1325 两棵树的问题

    Discription 对于 100% 的数据, N<=50. solution: 发现N比较小,所以我们可以花O(N^2)的代价枚举两颗树的联通块的LCA分别是哪个点,然后现在问题就变成了:选 ...

  10. 洛谷 P2613 【模板】有理数取余

    P2613 [模板]有理数取余 题目描述 给出一个有理数c=\frac{a}{b}c=ba​,求c\ \bmod 19260817c mod19260817的值. 输入输出格式 输入格式: 一共两行. ...