1:MapReduce的应用场景node
2:MapReduce编程模型算法
3:MapReduce的架构数据库
4:常见MapReduce应用场景编程
5:总结网络
MapReduce的定义架构
源自于Google的MapReduce论文
发表于2004年12月
Hadoop MapReduce是Google MapReduce克隆版
MapReduce特色
易于编程
良好的扩展性
高容错性
适合PB级以上海量数据的离线处理app
MapReduce的特点—不擅长的方面框架
实时计算
像MySQL同样,在毫秒级或者秒级内返回结果
流式计算
MapReduce的输入数据集是静态的,不能动态变化
MapReduce自身的设计特色决定了数据源必须是静态的
DAG计算
多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出分布式
MapReduce的实例一Wordcount函数
场景:有大量文件,里面存储了单词,且一个单词占一行
任务:如何统计每一个单词出现的次数
相似应用场景
搜索引擎中,统计最流行的K个搜索词
统计搜索词频率,帮助优化搜索词提示
Case1:整个文件能够加载到内存中
Case2:文件太大不能加载到内存中,但<word, count>能够存放到内存中;
Case3:文件太大没法加载到内存中,且<word, count>也不行
将问题范化为:有一批文件(规模为TB级或者PB级),如何统计这些文件中全部单词出现的次数
方案:首先,分别统计每一个文件中单词出现次数,而后累加不一样文件中同一个单词出现次数
典型的MapReduce过程
Input:一系列key/value对
用户提供两个函数实现:
map(k,v)list(k1,v1)
reduce(k1, list(v1))v2
(k1,v1) 是中间key/value结果对
Output:一系列(k2,v2)对
map(key,value): //key : document name; value: text of document for each word w in value : emit(w,1) reduce (key,value): //key : a word; value : an iterator over counts result = 0 for each count v in values : result += v emit(key,result)
MapReduce编程模型
MapReduce将做业的整个运行过程分为两个阶段:Map阶段和Reduce阶段
Map阶段由必定数量的Map Task组成
输入数据格式解析:InputFormat
输入数据处理:Mapper
数据分组:Partitioner
Reduce阶段由必定数量的Reduce Task组成
数据远程拷贝
数据按照key排序
数据处理:Reducer
数据输出格式:OutputFormat
MapReduce编程模型一内部逻辑
MapReduce编程模型一外部物理结构
MapReduce编程模型一InputFormat
文件分片
将分片数据解析成key/value对
默认实现是TextInputFormat
TextInputFormat
key是行在文件中的偏移量,value是行内容
MapReduce编程模型一Split与Block
Block
HDFS中最小的数据存储单位
默认是64MB或128M
Split
MapReduce中最小的计算单元
默认与Block一一对应
Block与Split
Split与Block是对应关系是任意的,可由用户控制
MapReduce编程模型一InputFormat
MapReduce编程模型一Combiner
Combiner可作看local Reducer
合并相同的key对应的value(Wordcount例子)
一般与Reducer逻辑同样
好处
减小Map Task输出数据量(磁盘IO)
减小Reduce-Map网络传输数据量(网络IO)
如何正确使用
结果可叠加
SUM
MapReduce编程模型
Map阶段
InputFormat(默认TextInputFormat)
Mapper
Combiner(local Reducer)
Partitioner
Reduce阶段
Reducer
OutputFormat(默认TextOutputFormat)
MapReduce1.0架构
MapReduce(分布式计算框架)
MapReduce2.0架构
Client
与MapReduce 1.0的Client相似,用户经过Client与YARN交互,提交MapReduce做业,查询做业运行状态,管理做业等。
MRAppMaster
功能相似于 1.0中的JobTracker,但不负责资源管理;
功能包括:任务划分、资源申请并将之二次分配个MapTask和Reduce Task、任务状态监控和容错。
MapReduce2.0运行流程
MapReduce2.0容错性
MRAppMaster容错性
一旦运行失败,由YARN的ResourceManager负责从新启动,最多重启次数可由用户设置,默认是2次。一旦超过最高重启次数,则做业运行失败。
Map Task/Reduce Task
Task周期性向MRAppMaster汇报心跳;
一旦Task挂掉,则MRAppMaster将为之从新申请资源,并运行之。最多从新运行次数可由用户设置,默认4次。
MapReduce计算框架一数据本地性
什么是数据本地性( data locality)
若是任务运行在它将处理的数据所在的节点,则称该任务具备“数据本地性”
本地性可避免跨节点或机架数据传输,提升运行效率
数据本地性分类
同节点(node-local)
同机架(rack-local)
其余(off-switch)
MapReduce计算框架一推测执行机制
做业完成时间取决于最慢的任务完成时间
一个做业由若干个Map任务和Reduce任务构成
因硬件老化、软件Bug等,某些任务可能运行很是慢
推测执行机制 就是为了解决上面的情形
发现拖后腿的任务,好比某个任务运行速度远慢于任务平均速度
为拖后腿任务启动一个备份任务,同时进行
谁先运行完,则采用谁的结果
不能启用推测执行机制
任务间存在严重的负载倾斜,如一个任务处理的数据远大于其余
特殊任务,好比任务向数据库中写数据
常见MapReduce应用场景
简单的数据统计,好比网站pv、uv统计
搜索引擎建索引
海量数据查找,在海量数据中并行查找符合某个特征的数据
复杂数据分析算法实现,mahout基于MR实现的数据挖掘库
聚类算法
分类算法
推荐算法
图算法
总结
MapReduce基本原理
MapReduce编程模型
MapReduce架构
MapReduce任务调度器
MapReduce应用场景