MapReduce计算模型(二)
MapReduce到底解决什么问题?
MapReduce准确的说,它不是一个产品,而是一种解决问题的思路,能够用分治策略来解决问题。例如:网页抓取、日志处理、索引倒排、查询请求汇总等等问题。通过分治法,将一个大规模的问题,分解成多个小规模的问题(分),多个小规模问题解决,再统筹小问题的解(合),就能够解决大规模的问题。最早在单机的体系下计算,当输入数据量巨大的时候,处理很慢。如何能够在短时间内完成处理,很容易想到的思路是,将这些计算分布在成百上千的主机上,但此时,会遇到各种复杂的问题,例如:并发计算、数据分发、错误处理、数据分布、负载均衡、集群管理与通信等,将这些问题综合起来将是比较复杂的问题了,而Google为了方便用户使用系统,提供给了用户很少的接口,去解决复杂的问题。
(1) Map函数接口:处理一个基于key/value(后简称k/v)的数据对(pair)数据集合,同时也输出基于k/v的数据集合。
(2) Reduce函数接口:用来合并Map输出的k/v数据集合
假设我们要统计大量文档中单词出现的次数。
Map
输入K/V:pair(文档名称,文档内容)
输出K/V:pair(单词,1)
Reduce
输入K/V:pair(单词,1)
输出K/V:pair(单词,总计数)
Map伪代码:
1 2 3 4 5 |
|
Reduce伪代码:
1 2 3 4 5 6 7 8 9 10 |
|
可以看到,R个reduce实例并发进行处理,直接输出最后的计数结果。需要理解的是,由于这是业务计算的最终结果,一个单词的计数不会出现在两个实例里。即:如果(a, 256)出现在了实例1的输出里,就一定不会出现在其他实例的输出里,否则的话,还需要合并,就不是最终结果。
再看中间步骤,map到reduce的过程,M个map实例的输出,会作为R个reduce实例的输入。
问题一:每个map都有可能输出(a, 1),而最终结果(a, 256)必须由一个reduce输出,那如何保证每个map输出的同一个key,落到同一个reduce上去呢?
这就是“分区函数”的作用。分区函数是使用MapReduce的用户按所需实现的,决定map输出的每一个key应当落到哪个reduce上的函数。如果用户没有实现,会使用默认分区函数。为了保证每一个reduce实例都能够差不多时间结束工作任务,分区函数的实现要点是:尽量负载均衡,即数据均匀分摊,防止数据倾斜造成部分reduce节点数据饥饿。如果数据不是负载均衡的,那么有些reduce实例处理的单词多,有些reduce处理的单词少,这样就可能出现所有reduce实例都处理结束,最后等待一个需要长时间处理的reduce情况。
问题二:每个map都有可能输出多个(a, 1),这样就增大了网络带宽资源以及reduce的计算资源,怎么办?
这就是“合并函数”的作用。有时,map产生的中间key的重复数据比重很大,可以提供给用户一个自定义函数,在一个map实例完成工作后,本地就做一次合并,这样将大大节约网络传输与reduce计算资源。合并函数在每个map任务结束前都会执行一次,一般来说,合并函数与reduce函数是一样的,区别是:合并函数是执行map实例本地数据合并,而reduce函数是执行最终的合并,会收集多个map实例的数据。对于词频统计应用,合并函数可以将:一个map实例的多个(a, 1)合并成一个(a, count)输出。
问题三:如何确定文件到map的输入呢?
随意即可,只要负载均衡,均匀切分输入文件大小就行,不用管分到哪个map实例都能正确处理。
问题四:map和reduce可能会产生很多磁盘io,将更适用于离线计算,完成离线作业。
MapReduce计算模型(二)相关推荐
- 从 WordCount 到 MapReduce 计算模型
概述 虽然现在都在说大内存时代,不过内存的发展怎么也跟不上数据的步伐吧.所以,我们就要想办法减小数据量.这里说的减小可不是真的减小数据量,而是让数据分散开来.分开存储.分开计算.这就是 MapRedu ...
- 3 MapReduce计算模型
MapReduce被广泛应用于日志分析.海量数据排序.在海量数据中查找特定模式等场景中. MapReduceJob 在Hadoop中,每个MapReduce任务都被初始化为一个Job. 每个Job又可 ...
- 大数据Hadoop(十六):MapReduce计算模型介绍
文章目录 MapReduce计算模型介绍 理解MapReduce思想 Hadoop MapReduce设计构思
- 大数据图数据库之离线挖掘计算模型
/* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ author: 张俊林 节选自<大数据日知录:架构与算法>十四章,书籍目录在此 对于离 ...
- 大数据计算技术-数据计算处理系统-计算模式(计算模型)
大数据计算技术-数据计算处理系统-计算模式(计算模型) 1计算模式(计算模型) 1.1批处理计算模式:数据计算处理系统例子:MapReduce计算模型 1.2流计算模式 1.2.1定义 1.2.2流计 ...
- Hadoop详解(六):MapReduce计算框架详解
1. Hadoop MapReduce简介 Hadoop MapReduce是一个使用简便的软件框架,是Google云计算模型MapReduce的Java开源实现,基于它写出来的应用程序能够运行在由上 ...
- Storm 02_Storm 计算模型
一.Storm 计算模型 Topology – DAG有向无环图的实现 对于Storm实时计算逻辑的封装 即,由一系列通过数据流相互关联的Spout.Bolt所组成的拓扑结构 生命周期:此拓扑只要启动 ...
- 【Hadoop】谷歌的三篇论文(GFS、MapReduce分布式计算模型 、BigTable大表)
谷歌的三篇论文(GFS.MapReduce分布式计算模型 .BigTable大表) 0 谷歌的基本思想:三驾马车 1 第一篇论文:GFS 1.1 Google的GFS分布式文件系统的基本原理 1.2 ...
- 大数据快速入门(05):MapReduce 编程模型赏析
一.Hadoop 诞生的传奇故事 (上图是 Doug Cutting,hadoop 之父) 1985年,Cutting 毕业于美国斯坦福大学. Cutting 的第一份工作是在 Xerox 做实习生, ...
- ECCV2020最佳论文解读之递归全对场变换(RAFT)光流计算模型
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 计算机视觉三大国际顶级会议之一的 ECCV 2020 已经召开.今年 ECCV 共收到有效投稿 502 ...
最新文章
- win7下安装dynamips完全版
- element ui表格点击整行选择_element-ui实现动态表头的表格问题汇总
- ABAP检查日期and时间合法性的函数
- Docker(2):使用Dockerfile创建支持SSH服务的镜像
- WebBIOS使用手册
- 数据库身份证号用什么类型_鱼缸要不要铺底?用什么铺底?这3种类型,我有4个建议...
- 一款很好看的个人主页简单源码
- ae 的动画导出为html,Bodymovin v5.5.3 – AE导出Web动画插件+使用教程
- 解决 误删Path环境变量的问题
- 统计学三大相关系数之斯皮尔曼(spearman)相关系数
- 四种常用的ps抠图方法
- linux报错Error: /proc must be mounted
- 2017艾普兰机智云全家福
- CSS课堂案例8-小米布局
- h5 适配 iphoneX 的全面屏 (上有刘海 ,下有呼吸灯) ,在iphonX 上 fixed定位的问题
- 【IoT】卫朋:6000+ 字解读 | 2022年产品人必备的7个产品管理工具(1.0版)
- Oracle创建和查询索引
- 面向对象的特点?对象模型、动态模型和功能模型3种模型之间的关系?
- mysql相关的dll_libmySQL.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- Echarts基本使用(vue实现3D地图)
热门文章
- 计算机网络po3代表的意思,计算机系统与网络技术中常用的单词缩写的意思.pdf...
- Linux查询命令帮助语句,linux有关命令的帮助和用法查看
- php中几个数组函数array_slice() array_filter array_unique() in_array()
- php中通过post和get传递数组的方法
- Android开发20——单个监听器监听多个按钮点击事件
- Oracle中Lpad函数和Rpad函数的用法
- oj 26319 最大子序和
- ObjectAnimator实现菜单的弹出(扇形)
- [BZOJ 5074]小B的数字
- @Autowired与@Resource