【Hadoop】MapReduce笔记(一):MapReduce作业运行过程、任务执行
一、MR作业运行过程
JobClient的runJob()方法:新建JobClient实例,并调用其submitJob()方法。提交作业后,runJob()每秒轮询作业进度,如果发现上次上报后信息有改动,则把进度报告输出到控制台。作业完成,成功则显示作业计数器;失败则输出错误到控制台。
(一)JobClient的submitJob()的作业提交过程:
1. 向JobTracker请求一个新jobID,通过JobTracker的getNewJobId()获取;
2. 检查作业输出说明。例如,如果没有指定输出目录或者已经存在,作业将不会被提交,错误返回给MR程序;
3. 计算作业输出划分split。如果划分无法计算(eg.输入路径不存在),作业将不会被提交,错误返回给MR程序;
4. 将运行作业所需要的资源(作业的jar文件、配置文件、计算所得的输入划分)复制到一个以作业ID命名的目录中JobTracker的文件系统。如果作业jar的副本很多,在TaskTracker运行作业任务时,集群可以提供多副本访问(图中step3);
5. 通过调用JobTracker的submitJob()方法,告诉JobTracker作业准备执行(图中step4);
6. JobTracker接收到submitJob()方法调用后,把此调用放到一个内部队列中,交由作业调度器进行调度,并对其进行初始化(包括创建一个代表该正在运行的作业对象,负责封装任务和记录信息,以便跟踪任务的状态和进程)。(图中step5)
7. 创建运行任务列表,作业调度去首先从共享文件系统中获取JobClient已经计算好的输入划分信息(图中step6),然后为每个划分创建一个Map任务(一个split对应一个map,有多少split就有多少map)。创建的Reduce任务的数量由JobConf的mapred.reduce.tasks属性决定,其用setNumReduceTasks()方法设定,然后调度器便创建指定个数的Reduce来运行任务,任务在此时指定ID。
8. TaskTracker执行一个简单的循环,定期发送心跳(heartbeat)调用JobTracker,心跳告诉JobTrackder是否存活以及充当消息通道。(图中step7)
(二)TaskTracker分配任务之后的任务运行过程:
1. 作业JAR文件本地化:从共享文件系统复制到TaskTracker。并且应用程序全部文件从分布式缓存复制到本地磁盘;
2. 为任务新建一个本地工作目录,JAR文件内容会被解压到此目录;
3.新建一TaskRunner实例运行此任务。TaskRunner启动一个新的JVM(图中step9-10)来运行每个任务。
二、MR任务运行
(一)推测执行
【典型案例】系统中有99%的Map任务都完成了,只有少数几个Map老是进度很慢,完不成,怎么办?
【分析】Hadoop会把任务分配到多个节点,当中一些慢的节点会限制整体程序的执行速度。这时Hadoop会引入“推测执行”过程:
因为作业中大多数任务都已经完成,hadoop平台会在几个空闲节点上调度执行剩余任务复制,当任务完成时会向JobTracker通告。任何一个首先完成的复制任务将成为权威复制,如果其他复制任务还在推测执行中,hadoop会告诉TaskTracker去终止这些任务并丢弃其输出,然后reducer会从首先完成的mapper那里获取输入数据。
推测执行为默认启用,设置JobConf的mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution为false可以禁止推测执行。
(二)任务JVM重用
mapred.job.reuse.jvm.num.tasks默认为1,即每个Task都启动一个JVM来运行任务,当值为-1时,表示JVM可以无限制重用。
当值为-1时,TaskTracker先判断当前当前节点是否有slot剩余,如果没有slot槽位才会判断当前分配的slot槽位中的JVM是否已经将当前task任务运行完,如果task已经运行完,才会复用当前JVM(同一Job的JVM才会复用)
注意:当一个Job的Task(尤其Task耗时很小)数目很大,由于频繁的JVM停启会造成很大开销,进行JVM复用会使同一个Job的一些静态数据得到共享,从而是集群性能得到很大提升。
但是JVM重用会导致在同一个JVM中的碎片增加,导致JVM性能变差。
【Hadoop】MapReduce笔记(一):MapReduce作业运行过程、任务执行的更多相关文章
- 【hadoop代码笔记】Mapreduce shuffle过程之Map输出过程
一.概要描述 shuffle是MapReduce的一个核心过程,因此没有在前面的MapReduce作业提交的过程中描述,而是单独拿出来比较详细的描述. 根据官方的流程图示如下: 本篇文章中只是想尝试从 ...
- Hadoop学习笔记: MapReduce Java编程简介
概述 本文主要基于Hadoop 1.0.0后推出的新Java API为例介绍MapReduce的Java编程模型.新旧API主要区别在于新API(org.apache.hadoop.mapreduce ...
- hadoop 学习笔记:mapreduce框架详解
开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- Hadoop学习笔记:MapReduce框架详解
开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- 【Big Data - Hadoop - MapReduce】hadoop 学习笔记:MapReduce框架详解
开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- hadoop 学习笔记:mapreduce框架详解(转)
原文:http://www.cnblogs.com/sharpxiajun/p/3151395.html(有删减) Mapreduce运行机制 下面我贴出几张图,这些图都是我在百度图片里找到的比较好的 ...
- 实例理解mapreduce任务的串行运行过程
一.准备: eclipse,hadoop集群 注意:为了方便测试和修改,我用的是 windows 连接hadoop集群,这样在windows 下直接就能够执行 mapreduce 任务,方便程序调试. ...
- Spark源码系列(三)作业运行过程
作业执行 上一章讲了RDD的转换,但是没讲作业的运行,它和Driver Program的关系是啥,和RDD的关系是啥? 官方给的例子里面,一执行collect方法就能出结果,那我们就从collect开 ...
- Hadoop学习笔记—11.MapReduce中的排序和分组
一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出,在Step1.4也就是第四步中,需要对不同分区中的数据进行排 ...
随机推荐
- <转>关于 error LNK2019:无法解析的外部符号 ,该符号在函数**中被引用的思考
错误提示信息摘抄如下: ---------------------------------------------------------------------------------------- ...
- Spark 性能相关參数配置具体解释-shuffle篇
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 随着Spark的逐渐成熟完好, ...
- 基于EfCore的一个多租户Demo
六月份如愿的转入了架构组,先上手搞了个CI服务器,把架构组的几个项目撸到上面去了.效果不错,接着就把其他两个项目组有单元测试的项目撸上去了,在桌子上放了个显示器当大屏用. 因为公司准备进行一个大的系统 ...
- Mvc之Ajax上传图片
MyAjaxForm下载地址,点击此处下载 视图部分: @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Lay ...
- iOS8需要兼容的内容
本文转载至 http://blog.csdn.net/liuwuguigui/article/details/39494435 1.iPad上使用presentModalViewController ...
- 用live555做流媒体转发服务器?
当我们看到这里,说明大家都有这样的一个想法:那就是如何用live555实现一个直播代理转发的流媒体服务器? 我们先不着急去讨论用live555实现流媒体转发的技术方法123,先从live555的整个架 ...
- BZOJ3627: [JLOI2014]路径规划
BZOJ3627: [JLOI2014]路径规划 Description 相信大家都用过地图上的路径规划功能,只要输入起点终点就能找出一条最优路线.现在告诉你一张地图的信息,请你找出最优路径(即最短路 ...
- jQuery param()作用与使用方法
$.param()方法是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化. $.param(obj) 返回 :string: 说明:将jquery对象按照name ...
- 剑指Offer:树的子结构【26】
剑指Offer:树的子结构[26] 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路 分为两步: 第一步:在树A中找到和树B的根节点的值一 ...
- Windows消息类型及说明
WM_ Window Message 窗口消息,一般用在SendMessage,PostMessage这样的消息函数中 SM_ Static Message 静态标签消息 SS_ Static Sty ...