一.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编程实战打好基础。
————————————————
版权声明:本文为CSDN博主「数据圈」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shengmingqijiquan/article/details/52911927