1. 背景
推测执行(Speculative Execution)是指在分布式集群环境下,因为程序BUG,负载不均衡或者资源分布不均等原因,造成同一个job的多个task运行速度不一致,有的task运行速度明显慢于其他task(比如:一个job的某个task进度只有10%,而其他所有task已经运行完毕),则这些task拖慢了作业的整体执行进度,为了避免这种情况发生,Hadoop会为该task启动备份任务,让该speculative task与原始task同时处理一份数据,哪个先运行完,则将谁的结果作为最终结果。
推测执行优化机制采用了典型的以空间换时间的优化策略,它同时启动多个相同task(备份任务)处理相同的数据块,哪个完成的早,则采用哪个task的结果,这样可防止拖后腿Task任务出现,进而提高作业计算速度,但是,这样却会占用更多的资源,在集群资源紧缺的情况下,设计合理的推测执行机制可在多用少量资源情况下,减少大作业的计算时间。
关于MRv1中的推测执行机制,我已经在“Hadoop中Speculative Task调度策略”(http://dongxicheng.org/mapreduce/hadoop-speculative-task/)中进行了介绍,有兴趣的读者可先阅读这篇文章。
2. MRv2中采用的算法
MRv2限定了任意一个作业的备份任务的数目上线,该数目是以下三个数值的最大值:
(1)MINIMUM_ALLOWED_SPECULATIVE_TASKS(常量10)
(2)PROPORTION_TOTAL_TASKS_SPECULATABLE(常量0.01) * totalTaskNumber
(3)PROPORTION_RUNNING_TASKS_SPECULATABLE (常量0. 1)* numberRunningTasks
当决定一个任务是够可以启动备份任务时,采用了下面的计算方法:
总是取speculationValue值最大的任务并为之启动备份任务,speculationValue计算方法为:
speculationValue= estimatedEndTime – estimatedReplacementEndTime
其中,estimatedEndTime是通过预测算法推测的该任务的最终完成时刻,计算方法为:
estimatedEndTime = estimatedRunTime + taskAttemptStartTime
其中,taskAttemptStartTime为该任务的启动时间,而estimatedRunTime为推测出来的任务运行时间,计算方法如下:
estimatedEndTime = (timestamp – start) / Math.max(0.0001, progress)
其中,timestamp为当前时刻,而start为任务开始运行时间,(timestamp-start)表示已经运行时间,progress为任务运行进度(0.0~1.0)。
estimatedReplacementEndTime含义为:如果此刻启动该任务,(可推测出来的)任务最终可能的完成时刻。很明显,如果estimatedReplacementEndTime大于estimatedEndTime,则没必要启动备份任务,因为即使启动了,它的完成时刻也会大于当前正在运行任务的完成时刻,只有当estimatedReplacementEndTime小于estimatedEndTime时,才有必要启动备份任务。而MRv2总是选择speculationValue值最大的任务并为之启动备份任务,且启动备份任务之前需检查是否满足以下条件:
(1) 每个任务最多只能有一个备份任务
(2) 已经完成的任务数目比例不小于MINIMUM_COMPLETE_PROPORTION_TO_SPECULATE(0.05,即5%),只有这样,才能有足够的历史信息估算estimatedReplacementEndTime
estimatedReplacementEndTime计算过方法为:{当前时刻}+{已经成功运行完成的任务所使用的平均运行时间}。
简单提炼一下核心思想:在某一时刻,判断一个任务是否拖后腿或者是否是值得为其运行备份任务时,则首先假设为其启动一个备份任务,那我们估算一下它的完成时间estimatedReplacementEndTime,同样,如果按照此刻该任务的计算速度,我们可以估算一下该任务最有可能的完成时间estimatedEndTime,如果estimatedEndTime与estimatedReplacementEndTime之差越大,则表明为该任务启动备份任务的价值越大。
3. 推测执行相关类
Speculator是一个服务,它由DefaultSpeculator实现,DefaultSpeculator接受并处理以下几种事件:
(1)ATTEMPT_STATUS_UPDATE
(2)ATTEMPT_START
(3)TASK_CONTAINER_NEED_UPDATE
(4) JOB_CREATE
DefaultSpeculator每隔一段事件会扫描一次所有正在运行的任务,如果一个任务可以启动备份任务,则会向Task发出一个T_ADD_SPEC_ATTEMPT事件,以启动另外一个任务实例。
DefaultSpeculator依赖于一个执行时间估算器,默认采用了LegacyTaskRuntimeEstimator,此外,MRv2还提供了另外一个实现:ExponentiallySmoothedTaskRuntimeEstimator,该实现采用了平滑算法对结果进行平滑处理。
分享到:
相关推荐
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
3. **执行推测任务的前提条件** - 每个Task只能有一个备份任务,以防止资源浪费和结果冲突。 - 当前Job已完成的任务比例至少达到5%,确保有足够的数据进行推测执行的基础。 - 需要开启推测执行的配置参数,例如在...
Apache Flink是一个开源的分布式流处理框架,用于在...通过这些资源,用户可以深入了解Flink在分布式环境中的运行机制,掌握在YARN/K8S平台上部署Flink集群的最佳实践,并对Flink的核心概念和技术细节有更全面的认识。
前提:配置好执行脚本的主机到其他主机的ssh登录 脚本使用:vim编辑脚本,按照自己的配置修改主机号,我的是hadoop1、2是NN;hadoop2、3是Spark Master;hadoop3还是RM;hadoop4、5、6是DN、NM、Spark Worker。编辑...
1. **缓存机制**:Yarn 将下载的包存储在一个全局缓存中,避免了重复下载,大大提高了安装速度。当项目需要相同包时,Yarn 直接从缓存中获取,无需再次下载。 2. **锁定文件**:Yarn 使用 `yarn.lock` 文件来确保...
对于深入理解YARN的工作机制,对源码的剖析是非常必要的。这有助于开发者更准确地把握各个组件之间的交互细节,从而更好地利用YARN的功能。例如,通过跟踪`getNewApplication`和`submitApplication`方法的具体实现,...
本篇将深入探讨YARN内存分配的管理机制以及相关参数配置。 首先,YARN内存管理涉及到三个主要角色:ResourceManager(RM)、ApplicationMaster(AM)和NodeManager(NM)。 1. ResourceManager(RM):RM是全局...
2. **基于C4.5决策树算法的推测执行机制**:传统的推测执行机制可能因为任务完成时间预测不准确而导致资源浪费。为此,本文提出了一种基于C4.5决策树算法的推测执行机制。该机制通过分析历史任务执行情况,训练出...
YARN的工作机制.doc
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)...
YARN的工作机制是Hadoop 2.x版本引入的重大改进,旨在解决早期Hadoop 1.x中MapReduce模型的局限性,尤其是单一JobTracker的性能瓶颈问题。以下是对YARN工作机制的详细解析: 1. **应用程序提交**:当一个MapReduce...
【Yarn工作机制和作业提交流程】是Hadoop生态系统中至关重要的一部分,它负责管理和调度分布式计算资源,确保高效地执行MapReduce等运算程序。Yarn,全称Yet Another Resource Negotiator,是一个资源调度平台,它的...
《Hadoop技术内幕深入解析YARN架构设计与实现原理》这本书深入探讨了Hadoop生态系统中的核心组件YARN(Yet Another Resource Negotiator),它是Hadoop 2.x版本中的关键改进,旨在解决早期Hadoop MapReduce的资源...
2. 执行 Yarn 安装命令:`yarn install` - 这一步骤将安装 Yarn 依赖项,并将其添加到项目中 Yarn 安装报错解决方案 在安装 Yarn 时,可能会遇到一些报错,以下是常见的解决方案: 1. PowerShell 无法加载文件...
- **MapReduce v2 (MRv2):** 作为 YARN 的一部分,支持新的 API,提高了灵活性和性能。 **2. MapReduce v1 与 MapReduce v2 的对比:** - **API 变更:** MRv2 提供了新的 API,允许开发者编写更复杂的应用程序。 ...
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 ...
YARN的功能点详细分析中包括了JobHistory机制,它记录了作业执行的历史信息,对于作业的调试和优化至关重要。YARN中的调度器(如FairScheduler)会根据资源的使用情况和预设策略进行资源的分配和调度,它包括了资源...