MapReduce概述及MapReduce详细实现
目录
一、概述
二、定义
三、MapReduce原理
1、原理
四、MR执行过程
1、map阶段
2、reudce阶段
3、shuffle过程
五、MapReduce默认输入处理类
六、RecordReader
七、Inputsplit
一、概述
1)MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题.
2)MapReduce是分布式运行的,由两个阶段组成:Map和Reduce,Map阶段是一个独立的程序,有很多个节点同时运行,每个节点处理一部分数据。Reduce阶段是一个独立的程序,有很多个节点同时运行,每个节点处理一部分数据【在这先把reduce理解为一个单独的聚合程序即可】。
3)MapReduce框架都有默认实现,用户只需要覆盖map()和reduce()两个函数,即可实现分布式计算,非常简单。 这两个函数的形参和返回值都是<key、value>,使用的时候一定要注意构造<k,v>。
二、定义
MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:
1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
2)MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理 。
三、MapReduce原理
1、原理
四、MR执行过程
1、map阶段
map任务处理
1.1 框架使用InputFormat类的子类把输入文件(夹)划分为很多InputSplit,默认,每个HDFS的block对应一个InputSplit。通过RecordReader类,把每个InputSplit解析成一个个<k1,v1>。默认,框架对每个InputSplit中的每一行,解析成一个<k1,v1>。
1.2 框架调用Mapper类中的map(...)函数,map函数的形参是<k1,v1>对,输出是<k2,v2>对。一个InputSplit对应一个map task(map任务)。程序员可以覆盖map函数,实现自己的逻辑。
1.3 (假设reduce存在)框架对map输出的<k2,v2>进行分区。不同的分区中的<k2,v2>由不同的reduce task处理。默认只有1个分区。 (假设reduce不存在)框架对map结果直接输出到HDFS中。
1.4 (假设reduce存在)框架对每个分区中的数据,按照k2进行排序、分组。分组指的是相同k2的v2分成一个组。注意:分组不会减少<k2,v2>数量。 1.5 (假设reduce存在,可选)在map节点,框架可以执行reduce归约。
1.6 (假设reduce存在)框架会对map task输出的<k2,v2>写入到linux 的磁盘文件中。 至此,整个map阶段结束。
2、reudce阶段
reduce任务处理
2.1框架对多个map任务的输出,按照不同的分区,通过网络copy到不同reduce节点。这个过程乘坐shuffle。
2.2框架对reduce端接收的【map任务输出的】相同分区的<k2,v2>数据进行合并、排序、分组。
2.3框架调用Reducer类中的reduce方法,reduce方法的形参是<k2,{v2...}>,输出是<k3,v3>。一个<k2,{v2...}>调用一次reduce函数。程序员可以覆盖reduce函数,实现自己的逻辑。
2.4框架把reduce的输出保存到HDFS中。
至此,整个reduce阶段结束。
3、shuffle过程
1.每个map有一个环形内存缓冲区,用于存储map的输出。默认大小100MB(io.sort.mb属性),一旦达到阀值0.8(io.sort.spill.percent),一个后台线程把内容溢写到(spilt)磁盘的指定目录(mapred.local.dir)下的一个新建文件中。
2.写磁盘前,要partition,sort。如果有combiner,combine排序后数据。
3.等最后记录写完,合并全部文件为一个分区且排序的文件。
1.Reducer通过Http方式得到输出文件的特定分区的数据。
2.排序阶段合并map输出。然后走Reduce阶段。
3.reduce执行完之后,写入到HDFS中。
shuffle执行过程图
五、MapReduce默认输入处理类
InputFormat 抽象类,只是定义了两个方法。
FileInputFormat
FileInputFormat是所有以文件作为数据源的InputFormat实现的基类,FileInputFormat保存作为job输入的所有文件,并实现了对输入文件计算splits的方法。至于获得记录的方法是有不同的子类——TextInputFormat进行实现的。
TextInputFormat
是默认的处理类,处理普通文本文件
文件中每一行作为一个记录,他将每一行在文件中的起始偏移量作为key,每一行的内容作为value
默认以\n或回车键作为一行记录
六、RecordReader
每一个InputSplit都有一个RecordReader,作用是把InputSplit中的数据解析成Record,即<k1,v1>。
在TextInputFormat中的RecordReader是LineRecordReader,每一行解析成一个<k1,v1>。其中,k1表示偏移量,v1表示行文本内容
七、Inputsplit
在执行mapreduce之前,原始数据被分割成若干split,每个split作为一个map任务的输入。
当Hadoop处理很多小文件(文件大小小于hdfs block大小)的时候,由于FileInputFormat不会对小文件进行划分,所以每一个小文件都会被当做一个split并分配一个map任务,会有大量的map task运行,导致效率底下
例如:一个1G的文件,会被划分成8个128MB的split,并分配8个map任务处理,而10000个100kb的文件会被10000个map任务处理
Map任务的数量
一个InputSplit对应一个Map task
InputSplit的大小是由Math.max(minSize, Math.min(maxSize,blockSize))决定
单节点建议运行10—100个map task
map task执行时长不建议低于1分钟,否则效率低
特殊:一个输入文件大小为140M,会有几个map task?
FileInputFormat类中的getSplits
查看MapReduce任务输出日志
historyserver进程作用
把之前本来散落在nodemanager节点上的日志统计收集到hdfs上的指定目录中
启动historyserver
执行sbin/mr-jobhistory-daemon.sh start historyserver
通过master:19888观察
MapReduce概述及MapReduce详细实现相关推荐
- 【Hadoop】Hadoop生态系列之MapReduce概述及MapReduce任务开发与发布
上一篇:Hadoop生态系列之HDFS常用Shell命令实践及Java API操作HDFS 这里写目录标题 MapReduce 概述 流程分析 环境搭建 MapReduce任务开发 背景 实现 任务发 ...
- MapReduce入门(一)—— MapReduce概述 + WordCount案例实操
MapReduce入门(一)-- MapReduce概述 文章目录 MapReduce入门(一)-- MapReduce概述 1.1 MapReduce 定义 1.2 MapReduce 优缺点 1. ...
- MapReduce概述
MapReduce概述 源自于Google的MapReduce论文,论文发表于2004年12月 Hadoop的MapReduce是Google MapReduce的克隆版.与HDFS非常类似. Map ...
- Hadoop基础--HDFS/Yarn/MapReduce概述
HDFS概述==> 1. Hadoop优势(4高): 1.高可靠性: Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失: 2.高扩展型: 在 ...
- MapReduce 概述
1. MapReduce 定义 MapReduce 是一个分布式运算程序的编程框架,是用户开发"基于Hadoop的数据分析应用"的核心框架. MapReduce 核心功能是将用户编 ...
- MapReduce概述及工作流程
内容 mapreduce原语(独创) mapreduce工作流程(重点) MR作业提交流程(重点) YARN RM-HA搭建(熟练) 运行自带的wordcount(了解) 动手写wordcount(熟 ...
- Mapreduce和Yarn概念,参数优化,作用,原理,MapReduce计数器 Counter,MapReduce 多job串联之ControlledJob(来自学习资料)
3.3. MapReduce与YARN 3.3.1 YARN概述 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运 ...
- Mapreduce和Yarn概念,参数优化,作用,原理,MapReduce计数器 Counter,MapReduce 多job串联之ControlledJob(来自学习资料)...
3.3. MapReduce与YARN 3.3.1 YARN概述 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而mapreduce等运算程序则相当于运 ...
- java大数据最全课程学习笔记(6)--MapReduce精通(二)--MapReduce框架原理
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages MapReduce精通(二) MapReduce框架原理 MapReduce工作流程 流程示意图 流程详解 上面的流程 ...
最新文章
- Mastercam X9中文版
- 2020-12-29 Matlab自动化控制-Adrc自抗扰控制参数调节
- java 构造函数抛出异常,构造函数抛出异常;嵌套异常是java.lang.NoClassDefFoundError:javax/servlet/ServletContext...
- ecs要按两次才有效_猫咪想要增肥有什么办法?吃是最简单有效的了,但要吃对了才行...
- LIS路径记录(UVA481)
- .NET Core中使用Dapper操作Oracle存储过程最佳实践
- 序列中最大的数(51Nod-1062)
- 马里兰大学calce电池循环测试数据集_Nature系列/Joule/Angew/EES超强盘点:水体系电池10大热点论文及发文趋势...
- Linux常用的基本命令13
- split() 注意事项.
- Markdown接口文档模板
- 怎样在计算机查汉字,推荐一种集汉字识字、查字、计算机输入于一体的规范汉字字形输入法—郑码(之二)...
- Android 节日短信送祝福(功能篇:1-数据库操作类与自定义ContentProvider)
- dw cs6 html建站点,dreamweaver cs6网页中制作锚点链接的教程方法
- 软件测试-进阶篇:设计测试用例-文本框
- 测试 CS4344 立体声DA转换器
- 唐宇迪学习笔记4:Python可视化库——Seaborn
- 计算机方面经典书籍一
- 深度学习框架tensorflow学习与应用6(防止过拟合dropout,keep_prob =tf.placeholder(tf.float32))
- 都说岁月不饶人,我们又何曾饶过岁月
热门文章
- idea的maven中出现target文件不完整或者“class not found“ 或 “test not fount“
- ECSHOP购物流程收货人信息详细地址显示省市区
- Linux 中把Python3设为默认Python版本的几种方法
- VM(虚拟机)Ubuntu打不开
- Mysql 安装 000007b_Win7安装软件出现应用程序无法正常启动0xc000007b的提示怎么解决...
- 来自中国各大高校著名导师的精品课程!绝对精典
- FPGA基础----TLP包格式以及组包方法(1)
- [RK3568 Android11] 教程之USB OTG模式切换
- 正态分布,最大值是多少,就是两边的极值?
- HTML显示默认图片实现