大数据学习(04)——MapReduce原理
前两篇文章介绍了HDFS的原理和高可用,下面再来介绍Hadoop的另外一个模块MapReduce。它的思想是很多技术的鼻祖,值得一学。
MapReduce是什么
MapReduce是一个分布式计算系统,它可以类比为SQL里的select ...group by...
它被分为两个阶段。第一个阶段叫Map,它每次处理一条原始数据的映射、转换,并将中间结果合并、排序,生成Reduce阶段的输入数据。第二个阶段叫Reduce,它拉取Map处理好的数据做排序,一次处理一组数据,生成最终结果。
从上面的定义可以看出,MapReduce是用来做集合的分组汇总操作,它只关心想要的少部分字段,对于原始记录的大多数字段都会忽略掉。
迭代器模式
为啥要在这里提迭代器模式?这是一位老师总结出来的心得。他认为MapReduce的处理过程跟迭代器模式非常像。
我们来看看迭代器模式的定义。学过设计模式的都知道,设计模式包含定义、参与者、场景等等。这里我们来看看定义和场景。
定义:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
场景:
- 访问一个聚合对象的内容而无需暴露它的内部表示
- 支持对聚合对象的多种遍历
- 为遍历不同的聚合结构提供一个统一的接口
目前还看不出来迭代器与MapReduce的相似之处,先写这里以后来看。
Map原理

在HDFS中,文件是以Block为单位来存放的。但是在Map任务中,输入的单位是split,它跟Block可以是1:1、1:N、N:1的关系。也就是说
- 一个Block块可以被一个Map任务处理
- 一个Block块可以被多个Map任务处理,每个Map只处理其中一部分
- 多个Block块可以合并被一个Map任务处理
Map的处理是在内存里的,而一个Block块的大小可以是128M,也可以是1G,这取决于你在配置文件中的定义。在默认1:1的情况下,如果Block块太大,超出了Map进程所占用的内存,那就没办法一次放到内存中。另外,Map是针对每一条记录来做映射、转换的,它一次只需要读取一条记录,不关心后面还有多少记录。这就可以借鉴迭代器的处理方式,每次从文件读一条记录,处理完之后再判断后面还有没有记录,有的话继续处理,没有就结束。
每条记录经过Map处理的结果是一个K,V,P的三元组,K,V是键和值这好理解,K值相同的记录是一组。P是K的散列值(对Reduce任务数量做散列),决定了它会被哪一个Reduce任务拉取。
当Map任务处理了一部分数据之后,它需要把内存里的处理结果落盘,以便释放空间来处理后续的文件。在落盘之前,它会做这么一件事,就是在内存中,对处理结果排序。首先根据P来排序,不同P值的数据会被不同的Reduce拉取。同一个P值的数据再根据K来排序。排完序的数据就可以落盘了。经过多次这样的操作,它会生成很多个小文件,这些小文件之间内部有序外部无序。在原始文件处理完毕,小文件全部生成之后,使用归并算法将小文件合并成一个中间结果文件,这个文件总体来讲先以P排序,相同P值再以K排序。至此,Map阶段的任务就完成了。
Reduce原理

Reduce阶段它的大处理单元是分区,即Map阶段处理后的P值。它的小处理单元是组,即K值相同的一组数据。
首先,它从所有的Map任务节点拉取自己分区的数据,然后将这些文件归并排序生成Reduce任务的输入数据。经过Reduce计算后,生成最终结果数据。
Map和Reduce的关系
Map与Reduce两个阶段的任务是线性阻塞的。
Map的结果集中,Key值相同的数据属于同一个分组,一个组是不能被分割到不同的Reduce任务去处理的。
Map任务的个数取决于HDFS文件的Block数(Block:Split=1:1情况下),Reduce任务个数可以人工确定。
Map任务与Reduce任务的比例可以是N:1、N:N、1:1、1:N等多种情况。当任务数为1时,会牺牲系统的并发度。当任务数为N时,会增加整个系统的资源开销。
一个实际的任务很难由一次MapReduce过程完成,它会将多个MapReduce任务组成一个pipeline,上一次Reduce的输出成为下一次Map任务的输入,经过多次处理才能获取最终结果。
大数据学习(04)——MapReduce原理的更多相关文章
- 大数据运算模型 MapReduce 原理
大数据运算模型 MapReduce 原理 2016-01-24 杜亦舒 MapReduce 是一个大数据集合的并行运算模型,由google提出,现在流行的hadoop中也使用了MapReduce作为计 ...
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- 大数据学习(一) | 初识 Hadoop
作者: seriouszyx 首发地址:https://seriouszyx.top/ 代码均可在 Github 上找到(求Star) 最近想要了解一些前沿技术,不能一门心思眼中只有 web,因为我目 ...
- 大数据篇:MapReduce
MapReduce MapReduce是什么? MapReduce源自于Google发表于2004年12月的MapReduce论文,是面向大数据并行处理的计算模型.框架和平台,而Hadoop MapR ...
- 大数据学习(16)—— HBase环境搭建和基本操作
部署规划 HBase全称叫Hadoop Database,它的数据存储在HDFS上.我们的实验环境依然基于上个主题Hive的配置,参考大数据学习(11)-- Hive元数据服务模式搭建. 在此基础上, ...
- 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)
引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...
- 大数据学习系列之六 ----- Hadoop+Spark环境搭建
引言 在上一篇中 大数据学习系列之五 ----- Hive整合HBase图文详解 : http://www.panchengming.com/2017/12/18/pancm62/ 中使用Hive整合 ...
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- 大数据学习系列之九---- Hive整合Spark和HBase以及相关测试
前言 在之前的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介绍了集群的环境搭建,但是在使用hive进行数据查询的时候会非常的慢,因为h ...
- 大数据学习之Linux基础01
大数据学习之Linux基础 01:Linux简介 linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹 在1991年10月5日首次发布.,在加上用户空间的应用程序之后 ...
随机推荐
- DG duplicate报错:RMAN-05001:auxiliary file name /u01/app/oracle/oradata/fratbs01.dbf conflicts with a file used by the target database
问题:rman duplicate时报错: RMAN-05001:auxiliary file name /u01/app/oracle/oradata/fratbs01.dbf conflicts ...
- 【进阶之路】深入理解Java虚拟机的类加载机制(长文)
我们在参加面试的时候,经常被问到一些关于类加载机制的问题,也都会在面试之前准备的时候背好答案,但是我们是否有去深入了解什么是类加载机制呢?这段时间因为一些事情在家看了些书,这次就和大家分享一些关于Ja ...
- 关于WLS2中Ubuntu启用SSH远程登录功能,基于Xshell登录,支持Root
背景介绍 虽然WSL2提供了非常便利的访问Ubuntu目录的形式,但是仍然我们需要通过一个工具,比如XSHELL来实现对Ubuntu的SSH登录. 获取并安装Xshell 7 目前Xshell已经更新 ...
- 聊一聊我在 B 站自学 Java 的经历吧
Hey guys ,这里是 cxuan,欢迎你收看我最新一期的文章. 这是一篇鸽了很久的文章...... 事情还要从上回说起...... 我爱 B 站! 这篇文章我汇总了 B 站上计算机基础(操作系统 ...
- js 判断是什么浏览器加载页面
一.Navigator 属性: 1)appcodeName 返回浏览器代码名 2)appminorVersion 返回浏览器次级版本 3)appname 返回浏览器名称 4)browserLan ...
- Element Ui使用技巧——Form表单的校验规则rules详细说明
Element UI中对Form表单验证的使用介绍: Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item的 prop 属性设置为需校验的字段名 ...
- uni-app中组件picker的基本使用(日期选择器为例)
例:需要在下图"自定义日期"中使用日期选择器 <template> <div> <picker mode="date" @chan ...
- 一小时搞懂Mysql锁机制
内容概述: 我们知道,数据也是一种供许多用户共享访问的资源.如何保证数据并发访问的一致性.有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素.从这一角度来说,锁对 ...
- [小技巧] google map使用
在网页中打开 google map 中,可以使用 shift + - 来缩小地图,shift + + 来放大地图.
- Vue | 路由守卫面试常考
前言 最近在整理基础,欢迎掘友们一起交流学习 结尾有彩蛋哦! Vue Router 路由守卫 导图目录 路由守卫分类 全局路由守卫 单个路由守卫 组件路由守卫 路由守卫执行的完整过程 路由守卫分类 全 ...