十张图带你入门Map/Reduce

2023-12-11 11:32
文章标签 入门 map 图带 reduce 十张

本文主要是介绍十张图带你入门Map/Reduce,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


发表于 2013-01-07 14:166647次阅读| 来源 个人博客10 条评论| 作者 Aurelien
Hadoop MapReduce
摘要:博主Aurelien,从13岁开始编程。曾在荷兰、比利时、法国、硅谷等多个国家从事网站开发,现效力于Terracotta公司。本篇文章来自Aurelien博客,用一个很简单的用例为初学者介绍了Map/Reduce的使用方法;希望为广大初学者带来帮助。

你可能已经知道:Map/Reduce是一种模式,非常适合令人烦恼的并行算法。但是什么是令人烦恼的并行算法?答案:这个算法非常适合被多重并行的执行。那么什么样的模式才会非常适合并行算法?答案:任何作用在数据上的算法都会被隔离。

如果你编写的程序经常会在同一个时刻执行多重事件,并且它们需要访问一些公用数据;那么将会出现冲突,你必须着手处理当一个事件修改某个数据时,而另一个事件正在读取这段数据。这就是并发操作。如果你事件作用的数据段没有被其它事件操作,那么做的将是并行操作。显而易见:你可以使用扩展来解决并发性问题。

举个例子:如果你有一张记录了城市的表格,而每个城市都有两个属性 —— 所属州和城市年度平均温度。比如:San Francisco:{CA,58}。现在你想计算每年的平均温度 —— BY STATE。因为可以通过state对city进行分组查询,然后计算一个州的平均温度而不涉及到其他的州 —— 这里就将会出现高度并行算法问题。

如果你想逐步做这件事,你将从一个空的平均温度表开始。然后迭代访问表中的城市,查询每个城市中的state属性,接着做出相关的年度平均温度修改。

接下来看第一幅图:

这是一张印度地图。有许多州:MP、CG、OR等等。同样有数个城市,每一个城市都有{State,City average temperture}作为值。

这里我们将做每个周的平均温度。我们将通过state来分组查询城市的平均温度,然后计算出每个组的平均值。

当然我们并不是很在意每个城市的名称,所以将抛弃它只保留州名和城市温度。

既然已经获得了我们想要的数据,那么可以通过state进行重分组。我们将得到一张关于所有州内所有平均温度的表。

这里我们得到了非常好的数据模型用于逻辑计算,而仅需要做的就是计算每个州的平均温度。

当然,这并不困难。

我们有一些数据。做一点点的重分组,然后做计算。当然所有的这些都可以并行的执行(每个state一个并行任务)。

下面我们使用Map/Reduce重做这个问题!

Map/Reduce有3个步骤:Map/Shuffle/Reduce

Shuffle部分由Hadoop自行完成,这里只需要关注Map和Reduce的实现部分。

在Map部分你需要输入<Key,Value>数据。

在这里Key就是城市的名称,而Value是属性集:所属州以及城市均温。

同样通过state将temperature重分组、排除下城市名称,那么在state变为Key时temperature将成为Value。

现在Shuffle的任务是实现Map的完成。它将会通过Key进行分组,然后你就会获得一个List<Value>。

这也将作为Reduce任务的输入数据 —— 从Shuffle任务中获得的Key、List<Value>。

Reduce任务还是数据逻辑的完成者,在这里当然就是计算州的年平均温度。

我们也将获得如下的最终结果

这样就完成了Map/Reduce对数据进行重塑:

Mapper<K1,V1> ==》 <K2,V2>

Reducer<K2,List<V2> >==》<K3,V3>

简单的Map/Reduce入门希望能帮助弄清Map/Reduce任务的实现过程,下面附带用例代码:用例代码部分(Java) 

原文链接:Confused About Map/Reduce?(编译/仲浩 王旭东/审校)

欢迎关注@CSDN云计算微博,了解更多云信息。

本文为CSDN编译整理,未经允许不得转载。如需转载请联系mark

这篇关于十张图带你入门Map/Reduce的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/480535

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce