文档章节

图解mapreduce原理和执行过程

solar.xie
 solar.xie
发布于 2016/07/09 18:36
字数 652
阅读 21
收藏 1

说明:

下面的图来自南京大学计算机系黄宜华老师开设的mapreduce课程的课件,这里稍作整理和 总结。

本文旨在对接触了mapreduce之后,但是对mapreduce的工作流程仍不是很清楚的人员,当然包括博主自己,希望与大家一起学习。

mapreduce的原理

MapReduce借鉴了函数式程序设计语言Lisp中的思想,Lisp(List processing)是一种列表处理语言,可对列表元素进行整体处理。

如:(add #(1 2 3 4) #(4 3 2 1))   将产生结果:#(5 5 5 5)

mapreduce之所以和lisp类似,是因为mapreduce在最后的 reduce阶段也是以key为分组进行列的运算。

下面这幅图就是mapreduce的工作原理

1)首先文档的数据记录(如文本中的行,或数据表格中的行)是以“键值对”的形式传入map 函数,然后map函数对这些键值对进行处理(如统计词频),然后输出到中间结果。

2)在键值对进入reduce进行处理之前,必须等到所有的map函数都做完,所以既为了达到这种同步又提高运行效率,在mapreduce中间的过程引入了barrier(同步障)

在负责同步的同时完成对map的中间结果的统计,包括 a. 对同一个map节点的相同key的value值进行合并b. 之后将来自不同map的具有相同的key的键值对送到同一个reduce进行处理

3)在reduce阶段,每个reduce节点得到的是从所有map节点传过来的具有相同的key的键值对。reduce节点对这些键值进行合并。

以词频统计为例。

词频统计就是统计一个单词在所有文本中出现的次数,在hadoop中的事例程序就是wordcount,俗称hadoop编程的"hello world".

因为我们有多个文本,所以可以并行的统计每个文本中单词出现的个数,然后最后进行合计。

所以这个可以很好地体现map,reduce的过程。

可以发现,这张图是上面那张图的进一步细化,主要体现在:

1)Combiner 节点负责完成上面提到的将同一个map中相同的key进行合并,避免重复传输,从而减少传输中的通信开销。

2)Partitioner节点负责将map产生的中间结果进行划分,确保相同的key到达同一个reduce节点.

本文转载自:http://blog.csdn.net/michael_kong_nju/article/details/23826979?utm_source=tuicool&utm_medium=refe...

共有 人打赏支持
solar.xie
粉丝 22
博文 110
码字总数 25844
作品 0
珠海
高级程序员
第6章-MapReduce的工作机制-笔记

作业的提交 可以只用一行代码来运行一个MapReduce作业: JobClient.runJob(conf)。 作业的调度 Hadoop作业调度演进 1、早期版本的Hadoop使用FIFO调度算法来运行作业 早期版本的Hadoop使用一种...

hiqj
2014/10/16
0
0
--Hadoop相关零散知识点

Hadoop学习笔记: 1、Hadoop三种安装模式 本地模式:本地模式是Hadoop默认的模式,只有Hadoop被配置成以非分布式模式运行的一个独立Java进程。默认模式下所有3个XML文件均为空,此时,Hadoo...

hiqj
2014/08/30
0
0
Hadoop中的MapReduce(5)

在MapReduce中,它也是主从结构,主节点:JobTracker,从节点:TaskTracker。主节点只有一个从节点有很多个,主节点在主机上,从节点分布到其他机器上。 JobTracker: 作用: 1、负责接收用户...

肖鋭
2014/02/23
0
0
MapReduce初探之一~~基于Mongodb实现标签统计

MapReduce 是一种编程模型,是 Google 提出的一种软件架构,主要应用于分布式系统上。Google对其原始的定义是“ MapReduce is a framework for computing certain kinds of distributable pr...

zhiweiofli
2013/03/06
0
5
一文详解大规模数据计算处理原理及操作重点

作者介绍 李智慧,《大型网站技术架构:核心原理与案例分析》作者。曾供职于阿里巴巴与英特尔亚太研发中心,从事大型网站与大数据方面的研发工作,目前在做企业级区块链方面的开发工作。 大数...

DBAplus社群
08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java JDK动态代理

本篇随笔是对java动态代理中的JDK代理方式的具体实现。 首先需要定义一个接口,为其定义了两个方法:   public interface UserService { public void add(); public void delete(); } 然后需...

编程SHA
27分钟前
2
0
轻松理解Dubbo分布式服务框架

Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的...

别打我会飞
35分钟前
2
0
TypeScript基础入门之JSX(一)

转发 TypeScript基础入门之JSX(一) 介绍 JSX是一种可嵌入的类似XML的语法。 它旨在转换为有效的JavaScript,尽管该转换的语义是特定于实现的。 JSX在React框架中越来越受欢迎,但此后也看到了...

durban
59分钟前
1
0
JavaScript使用原型判断对象类型

1. constructor属性 在JavaScript创建对象(二)——构造函数模式中,我们说过可以使用对象的constructor属性判断对象的类型:p1.constructor === Person,可能当时就有细心的读者会想,我们...

Bob2100
今天
1
0
10-《深度拆解JVM》JVM是怎么实现invokedynamic的?(下)

一、问题引入 上回讲到,为了让所有的动物都能参加赛马,Java 7 引入了 invokedynamic 机制,允许调用任意类的“赛跑”方法。不过,我们并没有讲解 invokedynamic,而是深入地探讨了它所依赖...

飞鱼说编程
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部