【Mapred】 JobTracker 内部类RecoveryManager简介(上)

2024-04-21 08:38

本文主要是介绍【Mapred】 JobTracker 内部类RecoveryManager简介(上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hadoop1.0.3版本
一直知道jobtracker有任务恢复、作业重跑功能等,那么jobtracker是如何实现的呢?
今天通过对jobtracker启动过程的跟踪,来一探究竟。
jobtracker有一个内部类叫做RecoveryManager ,同时jobtracker有个私有成员:
RecoveryManager recoveryManager;
在初始化的时候,对其构造:

recoveryManager = new RecoveryManager();

构造方法其实啥也没干,对其成员变量进行初始化,new一个容器用于保存需要重跑的jobId

public RecoveryManager() {jobsToRecover = new TreeSet<JobID>();}

到这里似乎还看不到它到底在干啥,接着往下看,初始化程序开始找hdfs上的所谓系统路径

  public String getSystemDir() {Path sysDir = new Path(conf.get("mapred.system.dir", "/tmp/hadoop/mapred/system"));  return fs.makeQualified(sysDir).toString();}

          for (FileStatus status : systemDirData) {try {recoveryManager.checkAndAddJob(status);} catch (Throwable t) {LOG.warn("Failed to add the job " + status.getPath().getName(), t);}}
到这里,RecoveryManager 开始干活了,要对这个路径下的所有目录进行检查,进去看看到底检查啥东西:

    // checks if the job dir has the required filespublic void checkAndAddJob(FileStatus status) throws IOException {String fileName = status.getPath().getName();if (isJobNameValid(fileName)) {recoveryManager.addJobForRecovery(JobID.forName(fileName));shouldRecover = true;}}

这里先要搞清楚集群上mapred.system.dir配置的路径下到底存了些什么玩意儿:

drwx------   - hadoop         supergroup          0 2013-12-24 01:09 /jobtracker/system/job_201305281414_821530
drwx------   - hadoop         supergroup          0 2013-12-24 01:12 /jobtracker/system/job_201305281414_821531
drwx------   - hadoop         supergroup          0 2013-12-24 01:12 /jobtracker/system/job_201305281414_821532
drwx------   - hadoop         supergroup          0 2013-12-24 01:12 /jobtracker/system/job_201305281414_821533
drwx------   - hadoop         supergroup          0 2013-12-24 01:12 /jobtracker/system/job_201305281414_821534
drwx------   - hadoop         supergroup          0 2013-12-24 01:12 /jobtracker/system/job_201305281414_821535
-rw-------   3 hadoop         supergroup          4 2013-05-28 14:14 /jobtracker/system/jobtracker.info

看了一眼,除了jobtracker.info,全是以jobid 命名的目录,里边都有个jobToken文件,并且是个二进制文件,至于这是个什么吊东西,回头再说。

    // checks if the job dir has the required filespublic void checkAndAddJob(FileStatus status) throws IOException {String fileName = status.getPath().getName();if (isJobNameValid(fileName)) {//对以作业号命名的目录进行处理recoveryManager.addJobForRecovery(JobID.forName(fileName));//我日,全部加到初始化的容器里了shouldRecover = true;}}
这样,凡是作业号出现在mapred.system.dir中的作业都收集起来,并且等待重跑。

注意这里重跑与否要看配置

<property><name>mapred.jobtracker.restart.recover</name><value>true</value><description>"true" to enable (job) recovery upon restart, "false" to start afresh </description>
</property>

否则,jobtracker会清空那个mapred.system.dir目录。

    if (!hasRestarted) {jobConf.deleteLocalFiles(SUBDIR);}//如果没有需要重跑的作业,那么清空jobtracker本机上的所有计算目录,//1.0.3版本是配置的所有目录下的jobTracker目录SUBDIR="jobTracker"

这样,在jobtracker初始化中,基本上没有RecoveryManager 的事了,转到jobtracker的offerService方法中,一上来就是它,擦:


while (true) {try {recoveryManager.updateRestartCount();break;} catch (IOException ioe) {LOG.warn("Failed to initialize recovery manager. ", ioe);// wait for some timeThread.sleep(FS_ACCESS_RETRY_PERIOD);LOG.warn("Retrying...");}}

updateRestartCount()方法就不讲了,比较啰嗦,就是干了一件事,把要重跑的作业数加1,再写到new Path(getSystemDir(), "jobtracker.info");文件中。

中间弄了个jobtracker.info.recover来回倒换。

从这里可以看出来,一定是那些需要重跑的作业以及总的个数都放到mapred.system.dir里了,至于啥时候放的,再哪放的,后续继续讨论。

下一篇接着讲这些需要重跑的作业到底怎么recover的,打个飞机睡了...


这篇关于【Mapred】 JobTracker 内部类RecoveryManager简介(上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922638

相关文章

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo