文档章节

Hadoop MapReduce 深入MapReduce Job 提交

fokYaland
 fokYaland
发布于 2015/06/04 17:26
字数 1188
阅读 140
收藏 0

一个job的运行,涉及4个实体: 客户端, JobTracker, TaskTracker, HDFS

【客户端】使用 Job.submit() 提交任务,任务提交后
1 向  jobtracker 请求一个新的作业ID ( JobTracker. getNewJobId() )
2 检查输出目录,例如输出目录已经存在,就不提交
3 计算作业的输入数据分片。如果分片无法计算(输入路径不存在),就不提交
4 将运作所需要的资源(Jar文件,配置文件,输入分片)复制到  jobtracker 的 一个以Job id命名的目录下【HDFS】。jar文件有多个副本(由  mapred.submit.replication 定义,默认10个 )
5 告知  jobtracker   作业准备执行,通过调用  JobTracker. submitJob()实现

【JobTracker】 接收到JOB调用后,会把Job放入一个内部队列,作业调度器会从其中选择Job,并对其初始化。
作业调度器首先从HDFS中获得数据分片信息。 为每个数据分片创建一个map task。reduce task数目由 mapred.reduce.tasks  确定或通过 job.setNumReduceTasks 设置。 除了map 和 reduce 任务,还会创建2个任务: a job setup task  和 a job cleanup task。

TaskTracker 】 定时发送 heartbeat 给 JobTracker  。 heartbeat 用于报告  Tasktracker是否还存活。同时会通知JobTracker 本结点是否可以运行task ,如果可以运行Task, JobTracker 会分配一个Task到当前结点。 
Tasktracker中有固定数目的Map Task  Slots ( 任务槽 ) 和 Reduce Task Slots。例如一个 Tasktracker 配置同时运行2个map  Task  和2个reduce  Task  。JobTracker 会先分配Map task,如果Map Task Slot 没有空余,才会分配Reduce task 。

如果是分配Reduce Task,Job Tracker 只是简单的从列表中选择一个。如果分配的是map Task,还需要考虑输入数据。
tasktracker 被分配一个任务后,首先把Jar文件复制到本地文件系统,同时会将所需要的全部文件从分布式缓存复制到本地磁盘。 tasktracker会新建一个本地工作目录,把Jar文件解压到这个文件夹。最后新建一个 TaskRunner 运行任务。 TaskRunner  会启动一个单独的JVM 运行任务。

进度和状态是通过heartbeat来更新和维护的。
如果 一个 task 报告进度,会设置一个标志位, tasktracker 中有一个单独进程每3分钟查询一次状态。tasktracker 每5分钟会向JobTracker提交一次状态,包括tasktracker上的所有task状态。JobTracker 会合并所有TaskTracker 的状态。
客户端可以通过Job.getStatus() 获得状态


Job Completion
当Job完成后,JobTracker会收一个Job Complete的通知,并将当前的Job状态更新为Successful,同时JobClient也会轮循获知提交的Job已经完成,将信息显示给用户。最后,JobTracker会清理和回收该Job的相关资源,并通知TaskTracker进行相同的操作(比如删除中间结果文件)。
可以设置  job.end.notifica tion.url 属性,当Job 完成后,会通知相应的http 地址。

Job 处理 失败 ,分为3种情况: task  失败 , tasktracker  失败 ,jobtracker  失败
task  失败 因用户代码问题,导致map 或 reduce    task  失败。子任务JVM 进程会在退出之前向 tasktracker 发送错误报告。本次 task 被标记为failed,并释放 slot 运行另一个task。 如果一个 task   间隔10分钟没有更新进度。tasktracker 会将任务标记为failed,之后  task   进程被自动杀死。可以通过属性 mapred.task.timeout  设置超时时间(毫秒) 
当jobtracker接到一个 task 失败的通知后,会重新调度task运行。如果一个task 失败4次或更多,就不会再重新执行这个task。可以通过属性 mapred.map.max.attempts  和  mapred.reduce.max.attempts  定义重试次数。 默认,任何tast 失败超过定义的最大重试次数后,整个job就会失败。 在实际应用中,有时并不想因为某个tast一直失败导致整个job失败。可以通过设置属性  mapred.max.map.failures.percent  和  mapred.max.reduce.failures.percent  

【Tasktracker 失败】如果一个Tasktracker 超过10分钟没有发送heartbeats。可以通过属性 mapred.task tracker.expiry.interval 设置(毫秒), jobtracker 会从任务池中移除 Tasktracker。重新调度这个 Tasktracker 中的所有任务。
如果一个 Tasktracker  上 有超过4个task失败 ( mapred.max.tracker.failures ), jobtracker 会记录当前 Tasktracker  失败,如果一个 Tasktracker   有超过4次失败( mapred.max.tracker.blacklists ), jobtracker  会把 当前 Tasktracker  加入黑名单。被加入黑名单的 Tasktracker  不会在被分配任务,但之前完成的task的输出可以继续使用。 被加入黑名单的 Tasktracker  重启后可以重新加入集群。

【jobtracker 失败】是非常严重的失败。Hadoop 没有办法处理这种失败。重启jobtracker后,所有未完成的Job 都需要重新提交









本文转载自:http://blog.csdn.net/yanliang1/article/details/17434651

fokYaland
粉丝 4
博文 68
码字总数 3062
作品 0
东城
私信 提问
2014-11-12--Hadoop的基础学习(三)--Hadoop中MapReduce框架入门

1.MapReduce的简单概念 百度百科:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",和他们的主要思想,都是从函数式编程语言里借来的...

查封炉台
2014/11/16
8.3K
8
Hadoop中的MapReduce(5)

在MapReduce中,它也是主从结构,主节点:JobTracker,从节点:TaskTracker。主节点只有一个从节点有很多个,主节点在主机上,从节点分布到其他机器上。 JobTracker: 作用: 1、负责接收用户...

肖鋭
2014/02/23
109
0
如何分布式运行mapreduce程序

如何分布式运行mapreduce程序 一、 首先要知道此前提 若在windows的Eclipse工程中直接启动mapreduc程序,需要先把hadoop集群的配置目录下的xml都拷贝到src目录下,让程序自动读取集群的地址后...

Zero零_度
2015/09/06
248
0
【hadoop】16.MapReduce-简介

简介 本章节我们先来了解一些关于MapReduce的理论知识。从本章节您可以学习到:MapReduce的相关知识。 1、概念 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析...

Areya
01/12
24
0
大数据之---Yarn伪分布式部署和MapReduce案例

1、软件环境 本次涉及伪分布式部署只是要主机hadoop01,软件安装参考伪分布式部署终极篇 2、配置yarn和mapreduce 3、提交测试jar计算圆周率 job15248048138350001 job命名格式: jobunix时间...

ycwyong
2018/05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 文件类操作API与IO编程基础知识

阅读目录: https://www.w3cschool.cn/java/java-io-file.html Java 文件 Java 文件 Java 文件操作 Java 输入流 Java 输入流 Java 文件输入流 Java 缓冲输入流 Java 推回输入流 Java 数据输入...

boonya
23分钟前
2
0
SDKMAN推荐一个好

是在大多数基于Unix的系统上管理多个软件开发工具包的并行版本的工具。它提供了一个方便的命令行界面(CLI)和API来安装,切换,删除和列出sdk相关信息。以下是一些特性: By Developers, fo...

hotsmile
48分钟前
8
0
什么是 HDFS

是什么? HDFS 是基于 Java 的分布式文件系统,允许您在 Hadoop 集群中的多个节点上存储大量数据。 起源: 单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称...

Garphy
51分钟前
5
0
一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
今天
10
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部