大数据学习之路(9):MapReduce 概述

471 阅读3分钟

0、前言

学一个东西,我们要知道它是什么?它能干什么?它是怎么做的?这三个问题。这篇文章将回给出这几个问题的答案,当然都是理论知识,了解了这些,后续进行实战学习。

一、概述

1.1 定义

mapReduce 面向大数据并行处理的计算模型、框架和平台,核心功能就是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。

1.2 发展历史

MapReduce初衷是谷歌公司为了解决其搜索引擎中大规模网页数据的并行化处理问题而设计出来的。MapReduce出现后,改写了Google搜索引擎的Web文档索引处理系统。

2003年和2004年,谷歌公司在国际会议上分别发表了分布式文件系统GFS和MapReduce的论文,公布了基本原理和主要设计思想。

2004年,开源项目Lucene(搜索索引程序库)和Nutch(搜索引擎)的创始人Doug Cutting发现MapReduce 正是可以解决大规模web数据处理的重要技术,因此模块Google的MapReduce,基于Java设计开发了Hadoop的MapReduce并行框架,自此,Hadoop成为Apache开源组织下重要的项目。

MapReduce的推出真正意义上给大数据并行处理带来了巨大的革命性影响,让它成为大数据处理的工业标准。改变了大规模计算的方式。

image.png

二、MapReduce主要功能

1、数据划分和计算任务调度

系统自动将一个作业(Job)待处理的数据划分为很多个数据块,每个数据块对饮一个计算任务(Task),并自动调度计算节点来处理相应的数据块。这个节点就是map节点或reduce节点。

2、数据/代码互相定位

为了减少数据通信,一个基本原则是本地化数据处理,一个计算节点尽可能处理其本地磁盘所分布的数据,当无法进行本地化数据处理时,再寻找最近的其他可用节点并将数据迁移。

3、系统优化

本身为了减少数据通信开销,中间数据进入Reduce节点前会进行一定的合并处理;Map节点输出的结果也要使用一定的策略进行划分处理,保证相关性数据发送到同一个Reduce节点。

4、出错检测和恢复

MapReduce能检测并隔离出错节点,调度分配新的节点接管出错节点的计算任务。用多备份冗余存储机制提高数据存储的可靠性。

三、MapReduce核心思想

MapRecue中,Map阶段处理的数据如何传递给Reduce阶段,是整个MapReduce框架中最关键的一个流程,这个流程就叫Shuffle。它的核心机制包括数据分区、排序和缓存等。

Map是映射,负责数据的过滤分发,将原始数据转化为键值对;

Reduce是合并,将具有相同的key值的value进行处理后再输出新的键值对作为最终结果。为了让reduce可以并行处理Map的结果,必须对Map的输出进行一定的排序与分割,然后再交给对应的Reduce,这个将Map输出进行进一步整理并交给Reduce的过程就是Shuffle。

image.png

Map 和reduce 操作需要开发人员自己定义相应的Map类和Reduce类,以完成所需要的化简、合并操作。

Shuffle的过程是包含在Map和Reduce的两端,即Map Shuffle和Reduce Shuffle。Map端的Shuffle过程是对Map结果进行分区、排序、分割,然后将属于同一区的输出合并在一起。