MapReduce框架在Yarn上的具体解释
MapReduce任务解析
在YARN上一个MapReduce任务叫做一个Job。
一个Job的主程序在MapReduce框架上实现的应用名称叫MRAppMaster.
MapReduce任务的Timeline
这是一个MapReduce作业运行时间:
- Map 阶段:依据数据块会运行多个Map Task
- Reduce 阶段:依据配置项会运行多个Reduce Task
为提高Shuffle效率Reduce阶段会在Map阶段结束之前就開始。(直到全部MapTask完毕之后ReduceTask才干完毕。由于每一个ReduceTask依赖全部的MapTask的结果)
Map阶段
首先看看Map阶段,一个Job须要多少Map Task吧
用户会提交什么?
当一个client提交的应用时会提供下面多种类型的信息到YARN上。
- 一个configuration(配置项):Hadoop有默认的配置项,所以即使什么都不写它也有默认的配置项载入。
优先级高到低顺序是用户指定的配置项
>etc/conf下的XML>默认配置项
- 一个JAR包
- 一个map()实现(Map抽象类的实现)
- 一个combiner 实现(combiner抽象类的实现,默认是跟Reduce实现一样)
- 一个reduce()实现(Reduce抽象类的实现)
- 输出输入信息:
- 输入文件夹:输入文件夹的指定。如输入HDFS上的文件夹、S3或是多少个文件。
- 输出文件夹:输出文件夹的指定。在HDFS还是在S3。
输入文件夹中的文件数用于决定一个Job的MapTask的数量。
那么究竟会有多少个MapTask呢?
Application Master会为每个split(分片)创建一个MapTask。通常情况下,每个文件都会是一个split。
假设文件太大(大于128M、HDFS默认块大小)就会分为多个split并关联到这个文件,也就是一个文件会产生多个Map Task。获取split数量方法代码例如以下 getSplits() of the FileInputFormat class:
num_splits = 0 for each input file f:remaining = f.lengthwhile remaining / split_size > split_slope:num_splits += 1remaining -= split_size
split_slope = 1.1 split_size =~ dfs.blocksize
MapTask运行过程
Application Master会向Resource Maneger资源管理器提交job所须要的资源:为每个split文件申请一个container来执行Map Task。
为了提高文件读取效率container在map split所在的机器上执行是最为理想的。因此AM会依据数据本地性>CPU>内存匹配的方式分配container
- 假设发现一个Node Manager上有所需的map split那么相关的container就会分配到这个NM上(由于依据HDFS备份机制有3台机器上同一时候拥有同样的块);
- 否则, 会分配到机柜内的其它机器上;
- 否则, 会分配到集群上的不论什么一个机器上
当容器被分配给AM时Map Task任务就会启动。
Map 阶段:演示样例
这是一个典型的Map运行场景:
- 有2个Node Manager:每一个Node Manager拥有2GB内存,而每一个MapTask须要1GB内存。因此每一个NM能够同一时候执行2个container
- 没有其它的应用程序在集群中执行
- 我们的job有9个split (比如,在输入文件夹里有8个文件。但当中仅仅有一个是大于HDFS块大小的文件,所以我们把它分为2个map split);因此须要9个map
MapTask运行的Timeline
如今让我们专注于一个Map Task任务。这是Map Task任务运行时间线:
- 初始化(INIT)阶段:初始化Map Task(默认是什么都没有。。
)
- 运行(EXECUTION)阶段: 对于每一个 (key, value)运行map()函数
- 排序(SPILLING)阶段:map输出会暂存到内存其中排序,当缓存达到一定程度时会写到磁盘上。并删除内存里的数据
- SHUFFLE 阶段:排序结束后,会合并全部map输出,并分区传输给reduce。
MapTask:初始化(INIT)
1. 创建一个Task上下文,Reduce也继承自它(TaskAttemptContext.class)
2. 创建MAP实例 Mapper.class
3. 设置input (e.g., InputFormat.class, InputSplit.class, RecordReader.class)
4. 设置output (NewOutputCollector.class)
5. 创建mapper的上下文(MapContext.class, Mapper.Context.class)
6. 初始化输入。比如
7. 创建一个SplitLineReader.class object
8. 创建一个HdfsDataInputStream.class object
MapTask:运行(EXECUTION)
Map的运行阶段从 Mapper class的run 方法開始,我们通常要写的也就是它了。默认情况下run之前会调用setup方法:这个函数没有做不论什么事情。可是我们能够重写它来配置相关的类变量等信息。运行setup方法之后会对每个<key, value>运行map()函数。
之后map context会存储这些数据到一个缓存区。为兴许排序做准备。
当map运行完处理时。还会调用一个clean方法:默认情况下,也不运行不论什么操作,但用户也能够重写它。
MapTask:排序(SPILLING)
运行阶段期间map会把数据写进一个缓存区(MapTask.MapOutputBuffer)。这个缓存大小由配置项设定mapreduce.task.io.sort.mb (默认:100MB)。为了提高硬盘刷写速度缓存区达到80%会写数据到磁盘,会有一个单独的线程并行运行。当缓存区容量达到100%那么就要等到这个单独的线程把数据写完才干继续运行map方法。
排序线程会运行下面动作:
1. 创建一个SpillRecord和一个FSOutputStream (在本地文件系统)
2. 在内存中对键值对进行高速排序
3. 分区
4. 按顺序写入本地分区文件。
Shuffle阶段
也就说从Map函数出来之后到Reduce函数之前的全部数据操作都叫Shuffle操作。包含排序、合并、分区、传输等。
Reduce阶段
Reduce阶段的run与Map阶段的run运行是类似的。
ref:http://ercoppa.github.io/HadoopInternals/AnatomyMapReduceJob.html
转载于:https://www.cnblogs.com/jhcelue/p/7228132.html
MapReduce框架在Yarn上的具体解释相关推荐
- 经典MapReduce作业和Yarn上MapReduce作业运行机制
一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...
- Apache Hadoop下一代MapReduce框架(YARN)简介 (Apache Hadoop NextGen MapReduce (YARN))
英文看着头大,先试着翻译一下. E文原文:http://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-yarn/hadoop-yarn-site/YARN ...
- Hadoop 新 MapReduce 框架 Yarn 详解
Hadoop MapReduceV2(Yarn) 框架简介 原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储 ...
- Hadoop mapreduce框架简介
传统hadoop MapReduce架构(老架构) 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 1.首先用户程序 (JobClient) 提交了一个 job,job 的信息会 ...
- 传统MapReduce框架
传统的MapReduce框架是google于2004年在论文:"MapReduce: Simplified Data Processing on Large Clusters"提出 ...
- MapReduce之如何给运行在YARN上的MapReduce作业配置内存
关于mapreduce程序运行在yarn上时内存的分配一直是一个让我蒙圈的事情,单独查任何一个资料都不能很好的理解透彻.于是,最近查了大量的资料,综合各种解释,终于理解到了一个比较清晰的程度,在这里将 ...
- 【Hadoop】伪分布式安装---MapReduce程序运行到YARN上,编写MapReduce程序---HDFS yarn
在我的虚拟机(Linux)上安装的Hadoop是2.7.3版本的,安装过程可以参考这个网站,也可以下载. http://hadoop.apache.org/docs/r2.7.6/hadoop-pro ...
- mapreduce on yarn简单内存分配解释
https://www.cnblogs.com/yesecangqiong/p/6274427.html 关于mapreduce程序运行在yarn上时内存的分配一直是一个让我蒙圈的事情,单独查任何一个 ...
- JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度
文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...
最新文章
- [转]为什么程序员总是写糟糕的代码?这3个原因
- 客户端升级为select模型
- node 安装_VUE项目迁移之node.js的安装
- YUV格式转换RGB(基于opencv)
- 一起谈.NET技术,asp.net页面中输出变量、Eval数据绑定等总结
- LINUX下的FTP服务器
- 空卡安装设置树莓派4B并安装opencv+QT
- 142. 环形链表 ||
- UVA 10917 Walk Through the Forest 最短路 + DP
- 官宣:两校合并,落户省会!
- 【华为OD机试真题 JAVA】机器人走迷宫
- 使用谷歌的浏览器全屏打开地址
- 免费版软件文档文件格式转换
- STM8L151 DAC
- 不换门可以改开门的方向吗_不换门可以改开门的方向吗?
- 华南理工大学化学考研
- 决策树之ID3 ,C4.5 ,CART,理论+实例
- Axure原型模板、元件库、组件库
- 大学生心理健康APP的设计与实现
- 在线客服QQ是怎么实现的
热门文章
- 计算机基础ppt_为什么大学老师教编程上课都不敲代码?为何老师上课都是PPT讲解,实战呢?...
- python爬取内容剔除nbsp_python 爬虫爬取内容时, \xa0 、 \u3000 的含义与处理方法...
- creator 静态属性_cocos creator 属性面板设置
- 过磅系统_简讯:崇义商砼公司开展无人值守过磅系统业务培训等二则
- 怎么把4张图片合成一张_暴露年龄的20张图片,最后一张是什么?求解
- python读取word内容存入数据库、并求simhash_介绍一个基于simhash作海量文章排重的库:simhashpy...
- php 浮点数 模运算,同余与模运算
- java hibernate方言_java – 如何在运行时获取Hibernate方言
- 红帽7编译安装mysql_精通RHEL7编译安装mysql-5.5.32
- 正弦函数_题型和解析 | 三角函数(补充)