一、介绍
MapReduce是一个用于处理海量数据的分布式计算框架
优点:
- 编程模型+基础架构
- 能够变编写在数百甚至上千台机器上运行的程序
- 自动并行化分布
- 容错(如果一台服务器宕机,作业可以由其他服务器完成)
- 程序/作业调度、状态检查和监控
缺点:
- MapReduce过于底层,编写Map,Reduce函数较为困难
- 不是所有算法都能用MapReduce实现
- 不适合实时响应的需求
二、执行流程
2.1 单机计算
单机简单计算数据流程:
读取数据,对数据进行逻辑处理,write模块对处理后的数据进行输出,固化到本地磁盘上。
2.2 Hadoop计算流程
(1)输入和拆分
Input data:数据输入,都是存储在HDFS中的。
InputFormat:MR框架基础类之一,进行数据格式化操作,分为两部分:数据分割(Data Split)和记录读取器(Record Reaer)。
Data Split:多条记录的集合构成split,每个split包含后一个Block中开头部分(解决记录跨block的问题)。
Record Reader:每读取一条记录,调用一次map函数,直到split的尾部。
(2)Map映射
把一组键值对映射成一组新的键值对,每条记录调用执行一次map()函数,就会在内存中增加数据。
(3)Shuffle派发(map到reduce)
Shuffle过程是指Mapper产生的直接输出结果,经过一系列的处理,成为最终的Reducer直接输入数据为止的整个过程,这是mapreduce的核心过程。该过程可以分为两个阶段:
- Mapper端的Shuffle:由Mapper产生的结果并不会直接写入到磁盘中,而是先存储在内存中,当内存中的数据量达到设定的阀值时,一次性写入到本地磁盘中(并不是HDFS)。并同时进行sort(排序)、combine(合并)、partition(分桶)等操作。其中,sort 是把 Mapper产生的结果按照key值进行排序;combine是把key值相同的记录进行合并;partition是把数据均衡的分配给 Reducer。
- Reducer端的Shuffle:由Mapper和Reducer往往不在同一个节点上运行,所以Reducer需要从多个节点上下载 Mapper的结果数据,并对这些数据进行处理,然后才能被