在MRAppMaster中,记录日志是由服务JobHistoryEventHandler完成的,而作业恢复是由服务RecoveryService完成的。
同MRv1一样,MRv2也会对一些关键的事件记录日志,这主要有两个作用:(1)方便用户查看历史作业运行信息 (2)作业因故障重新启动后,可根据日志信息恢复之前已经运行完成的任务,以减少重新计算代价。
MRAppMaster采用的日志格式与MRv1一样,但有两个小的改动:
(1)实现方式不同。MRv1采用了同步记录日志的方式,也就是说,每发生一个行为,会记录一次日志,然后才可以执行下面的代码。由于YARN引入了基于事件的异步编程模型,因此,MRAppMaster也采用了异步方式记录日志。
(2)存储位置不同。尽管MRv1允许用户将作业日志存放到HDFS上,但默认是存储到本地的,MRAppMaster则不同,它直接将日志写到HDFS上,这样,当MRAppMaster失败后,另一个MRAppMaster启动时,可直接读取HDFS中上一个作业产生的日志,以恢复已经运行完成的任务。
当前MRAppMaster记录的日志事件包括以下几类:
作业恢复的过程是重新解析作业日志,以恢复各个任务运行状态的过程(重做日志),这是由RecoveryService完成的。如果用户将yarn.app.mapreduce.am.job.recovery.enable参数置为true(默认就是true),则MRAppMaster运行作业之前,首先会检查这是否是第一次运行该作业,如果不是,则从HDFS上读取上次运行的作业日志,并恢复作业的运行状态,然后才会按照正常流程执行。相关代码如下(在MRAppMaster类中):
public void init(final Configuration conf) {
boolean recoveryEnabled = conf.getBoolean(
MRJobConfig.MR_AM_JOB_RECOVERY_ENABLE, true);
boolean recoverySupportedByCommitter = committer.isRecoverySupported();
if (recoveryEnabled && recoverySupportedByCommitter
&& appAttemptID.getAttemptId() > 1) {
LOG.info("Recovery is enabled. " + "Will try to recover from previous life on best effort basis.");
recoveryServ = createRecoveryService(context);
addIfService(recoveryServ);
dispatcher = recoveryServ.getDispatcher();
clock = recoveryServ.getClock();
inRecovery = true;
}
}
public void start() {
if (inRecovery) {
completedTasksFromPreviousRun = recoveryServ.getCompletedTasks();
amInfos = recoveryServ.getAMInfos();
}
……
}
分享到:
相关推荐
YARN(MRv2)搭建
yarn-v0.23.2.tar.gz 在安装ambari,源码编译的时候下载的文件有问题 手动下载 地址 https://github.com/yarnpkg/yarn/releases/download/v0.23.2/yarn-v0.23.2.tar.gz
Apache Flink是一个开源的分布式流处理框架,用于在...通过这些资源,用户可以深入了解Flink在分布式环境中的运行机制,掌握在YARN/K8S平台上部署Flink集群的最佳实践,并对Flink的核心概念和技术细节有更全面的认识。
脚本使用:vim编辑脚本,按照自己的配置修改主机号,我的是hadoop1、2是NN;hadoop2、3是Spark Master;hadoop3还是RM;hadoop4、5、6是DN、NM、Spark Worker。编辑完成后在满足“前提”的任意一台主机运行均可。 ...
2. **锁定文件**:Yarn 使用 `yarn.lock` 文件来确保所有开发者的环境中安装的包版本一致,解决了 npm 的版本漂移问题,提高了项目的可预测性和可重复性。 3. **并行下载**:Yarn 能够并行下载依赖包,显著提升了...
对于深入理解YARN的工作机制,对源码的剖析是非常必要的。这有助于开发者更准确地把握各个组件之间的交互细节,从而更好地利用YARN的功能。例如,通过跟踪`getNewApplication`和`submitApplication`方法的具体实现,...
TypeError: self.env.emit is not a function at /usr/local/share/.config/yarn/global/node_modules/yeoman-generator/lib/index.js:653:22 at processTicksAndRejections (internal/process/task_queues.js:97:5)...
- **MapReduce v2 (MRv2):** 作为 YARN 的一部分,支持新的 API,提高了灵活性和性能。 **2. MapReduce v1 与 MapReduce v2 的对比:** - **API 变更:** MRv2 提供了新的 API,允许开发者编写更复杂的应用程序。 ...
因此,YARN不仅仅局限于批处理作业,还可以支持交互式、迭代式作业以及数据流处理。 在YARN框架下,ResourceManager(RM)负责集群资源的管理和调度,它由调度器(Scheduler)和应用程序管理器(ApplicationManager...
【Yarn工作机制和作业提交流程】是Hadoop生态系统中至关重要的一部分,它负责管理和调度分布式计算资源,确保高效地执行MapReduce等运算程序。Yarn,全称Yet Another Resource Negotiator,是一个资源调度平台,它的...
YARN(Yet Another Resource Negotiator)是Apache Hadoop项目的一个子项目,其设计初衷是为了更好地管理大数据框架中的资源分配,以提升资源利用率和作业调度的效率。YARN通过引入资源管理器、节点管理器、应用程序...
rate-limit-redis redis中间件的存储 。...安装来自 npm 注册表# Using npm> npm install rate-limit-redis# Using yarn or pnpm> yarn/pnpm add rate-limit-redis来自 Github 发布# Using npm> npm install ...
文档还通过实例演示了MRv1和MRv2的使用方法,包括输入文件的准备、作业的执行和结果的查看。 5. YARN的管理 这一部分详细介绍了YARN的容器管理,包括容器的分配和应用配置。深入讲解了YARN的调度策略,包括FIFO、...
YARN的设计目标是实现一个更加通用和灵活的资源管理和作业调度系统,使得Hadoop不仅限于MapReduce一种计算模型,还能支持其他的数据处理模型。 YARN的核心组件包括: 1. 资源管理器(ResourceManager, RM):它是...
在深入探讨这个插件之前,我们首先需要理解Yarn工作区的基本概念。 Yarn工作区是Yarn包管理器的一个特性,允许在一个大的项目中管理多个相互依赖的子项目或库。它通过在根目录创建一个`package.json`文件,并在其中...
在这个主题中,我们将深入探讨"Yarn编程ApplicationList",包括如何实现应用列表的查询、应用的kill操作,以及Job的查询和map/reduce任务数量的查询。 首先,`Yarn编程ApplicationList`涉及到的主要概念是YARN的...
Hadoop的YARN架构是Hadoop版本2.x引入的一个重要组件,它负责处理资源管理和作业调度,而核心的计算任务处理则交给了MapReduce、Tez、Spark等计算框架。YARN的出现是为了解决Hadoop早期版本中的可扩展性问题,它通过...
SPARK2_ON_YARN-2.4.0 jar包下载
解压"yarn.tar.gz"后,用户可以探索YARN的内部结构,了解其工作原理,包括ResourceManager、NodeManager、ApplicationMaster等组件,以及它们如何协同处理作业提交、资源分配和任务执行。 深入学习YARN,你需要理解...