MapReduce 2.0应用场景和原理、基本架构和编程模型

来源:互联网 发布:男士商务双肩包 知乎 编辑:程序博客网 时间:2024/06/08 01:32

一.MapReduce的应用场景

1.MapReduce特点

 易于编程
 良好的扩展性
 高容错性
 适合PB级以上海量数据离线处理
备注:*MR的最后一个特性就注定了它的应用场景的特定性,专门为处理
离线批量大数据*而生。
问:那MR不擅长什么啊?它不擅长的东西谁比较擅长呢?

2.MapReduce的特色—不擅长的方面

  • 实时计算spark
    像MySQL一样,在毫秒级或者秒级内返回结果
  • 流式计算storm
     MapReduce的输入数据集是静态的,不能动态变化
     MapReduce自身的设计特点决定了数据源必须是静态的
  • DAG计算Tez
    多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出
    PS:你的弱点就是别人的机会!

3.常见MapReduce应用场景

  • 简单的数据统计,比如网站pv、 uv统计
  • 搜索引擎建索引
  • 海量数据查找
  • 复杂数据分析算法实现
    聚类算法
    分类算法
    推荐算法
    图算法

二.MapReduce编程模型

1.最经典的MR编程实例-WordCount

  • 场景:有大量文件,里面存储了单词, 且一个单词占一行
  • 任务:如何统计每个单词出现的次数?
  • 类似应用场景
    搜索引擎中,统计最流行的K个搜索词;
    统计搜索词频率,帮助优化搜索词提示

将问题范化为:有一批文件(规模为TB级或者 PB级),如何统计这些文件中所有单词出现的次数? 方案:首先,分别统计每个文件中单词出现次数,然后累加不同文件中同一个单词出现次数;
典型的MapReduce过程
这里写图片描述
下面详细介绍每一步的操作

  • Input: 一系列key/value对
  • 用户提供两个函数实现:
    • map(k,v) ->list(k1,v1)【(k1,v1) 是中间key/value结果对】
    • reduce(k1, list(v1)) ->v2
  • Output:一系列(k2,v2)对

2.MapReduce编程模型

MapReduce将作业的整个运行过程分为两个阶段:Map阶段和Reduce阶段

  • Map阶段由一定数量的Map Task组成
    • 输入数据格式解析:InputFormat
    • 输入数据处理: Mapper
    • 数据分组: Partitioner
  • Reduce阶段由一定数量的Reduce Task组成
    • 数据远程拷贝
    • 数据按照key排序
    • 数据处理: Reducer
    • 数据输出格式:OutputFormat

3.内部逻辑

这里写图片描述

4.外部物理结构

这里写图片描述

5.编程模型

【1】InputFormat

文件分片( InputSplit)方法,可处理跨行问题,将分片数据解析成key/value对,默认实现是TextInputFormat

备注:Block和Spit的区别
Block
HDFS中最小的数据存储单位
默认是64MB
Split
MapReduce中最小的计算单元
默认与Block**一一对应**
总之:Split与Block是对应关系是任意的,可由用户控制
这里写图片描述

【2】Combiner

这里写图片描述
Combiner可做看local reducer,合并相同的key对应的value( wordcount例子),通常与Reducer逻辑一样。
好处是减少Map Task输出数据量(磁盘IO),减少Reduce-Map网络传输数据量(网络IO)。

【3】Partitioner

Partitioner决定了Map Task输出的每条数据交给哪个Reduce Task处理。默认实现: hash(key) mod R,R是Reduce Task数目,允许用户自定义
,很多情况需自定义Partitioner
,比如“ hash(hostname(URL)) mod R”确保相同域名的网页交给同一个Reduce Task处理

6.编程模型总结

  • Map阶段
    • InputFormat(默认
    • TextInputFormat)
    • Mapper
    • Combiner( local reducer)
    • Partitioner
  • Reduce阶段
    • Reducer
    • OutputFormat

三.MapReduce的架构

1.MapReduce 1.0(分布式计算框架)

这里写图片描述
这里写图片描述
这里写图片描述

2.MapReduce 2.0架构

这里写图片描述
Client
与MapReduce 1.0的Client类似,用户通过Client与YARN交互,提交MapReduce作业,查询作业运行状态,管理作业等
MRAppMaster
- 功能类似于 1.0中的JobTracker,但不负责资源管理;
- 功能包括:任务划分、资源申请并将之二次分配个MapTask和Reduce ask、任务状态监控和容错。

3.MapReduce 2.0运行流程

这里写图片描述

4.MapReduce 2.0容错性

  • MRAppMaster容错性
    一旦运行失败,由YARN的ResourceManager负责重新启
    动,最多重启次数可由用户设置,默认是2次。一旦超过
    最高重启次数,则作业运行失败。
  • Map Task/Reduce Task
    Task周期性向MRAppMaster汇报心跳;
    一旦Task挂掉,则MRAppMaster将为之重新申请资源,并运行之。最多重新运行次数可由用户设置,默认4次。

5.数据本地性

什么是数据本地性( data locality)?
如果任务运行在它将处理的数据所在的节点,则称该任务具有“数据本地性”
。本地性可避免跨节点或机架数据传输,提高运行效率,尽量同节点或者同机架。
这里写图片描述

6.推测执行机制

  • 作业完成时间取决于最慢的任务完成时间
     一个作业由若干个Map任务和Reduce任务构成
     因硬件老化、软件Bug等,某些任务可能运行非常慢
  • 推测执行机制
     发现拖后腿的任务,比如某个任务运行速度远慢于任务平均速度
     为拖后腿任务启动一个备份任务,同时运行
     谁先运行完,则采用谁的结果
  • 不能启用推测执行机制
     任务间存在严重的负载倾斜
     特殊任务,比如任务向数据库中写数据

四.总结

本博客主要讲述了MR的应用场景,基本架构和编程模型。特别需要注意的是他的应用场景相对来说比较固定,主要是基于一些离线的数据做一些统计和挖掘的工作。另外MR的工作流程非常重要,一定是非常清晰的描述出集群的工作顺序以及每个环节的核心功能是什么,为下一篇MR编程实战打好基础。

阅读全文
0 0