`
langyu
  • 浏览: 888354 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MapReduce: JT默认task scheduling策略

阅读更多
      
         如果没有自己定制的调度策略,MapReduce就采用自带的JobQueue策略分发task。这种基于FIFO的策略挺简单,能满足基本的业务需求,但缺点也很明显,如不能实现job的实时性、所有TT的执行能力对用户共享等问题。当然这些只是按以往理解来概括,只有了解具体实现后,才能总结它的影响。本篇blog会从task 分发的流程入手,详细描述默认调度策略的细节,然后试着总结它的优点及不足。预期在对默认scheduling策略的能力有所掌握后,熟悉Facebook提供的Fair Scheduling策略。我相信合理的scheduling策略会对job执行有好地优化。那下面就开始正题吧。

        Job在JT初始化成map和reduce task后,这些task就需要分派到TT上执行。JT喜欢被动,得到TT的heartbeat后才响应,它考虑给这个TT应该分配哪些具体的task。怎样分派的工作是由JT的task scheduling策略来决定。现在要了解的就是MapReduce的默认FIFO scheduler:JobQueueTaskScheduler。

        FIFO很容易理解,重点在于依据什么条件来做FIFO。在JobQueue scheduler中,它是由job的优先级与提交时间来确定执行顺序。对于提交到JT的job, 默认是先根据优先级再根据提交时间排序,这样的一个job队列,就是scheduling策略的job处理顺序。job排序是第一步,最重要的一步是对于特定的TT,应该给它分配哪些task。在说明这些scheduling细节之前,先了解下与细节有关的概念,比如TT的slot数目,Cluster的slot数目等。

        Slot是task执行的逻辑概念,可以理解为TT同时并发可执行多少个task的能力。Slot分为map slot和reduce slot,可由用户通过mapreduce.tasktracker.map.tasks.maximum和mapreduce.tasktracker.reduce.tasks.maximum分别设置,默认分别为2。但一个TT到底能配置多少个slot,还是与它的物理环境有关。每个task是由新启动的JVM独立执行,有多个task的时候就会有多个JVM,每个JVM消耗一部分内存,再加上DN和TT的内存消耗,机器内存可能就会不够用。这样除了考虑调配每个新启动JVM的内存限制外,还得关注下到底需要多少个新启动JVM,也就是map slot 和 reduce slot的数目。它们的设置还与机器的处理器数目有关,如果期望每个处理器执行一个task,那么总slot数就是总处理器的数目减去DN和TT用去的处理器的数目(map slot + reduce slot = processors - 2)。具体的配置还得从Cluster的实际运行效果来观察和分析。

        知道每个TT的slot数目后,Cluster的map slot 和reduce slot数目就是把Cluster中所有TT的map 和 reduce slot加起来的效果。了解这些概念后,了解下图task 分发的流程。






        流程挺简单,后面只会大致说明下,但会对scheduler做具体分析。

        第一步:Cluster运行期,每个TT都要向JT汇报状态信息,这包括TT自身的状态属性、运行在TT上每个task的状态、slot的设置情况等。这些状态信息只是源数据(raw data),提供给JT做分析决策使用,task scheduler也需要它的。

        第二步和第三步:在JT组装对某个TT的response时,会调用task scheduler选取出适合那个TT的task。

        先计算出scheduler依赖的FIFO job queue中有多少task还没有执行,这些将要执行的task越多,当前Cluster的负载就越大。TT的负载与Cluster的负载是差不多相互影响的,如果Cluster的负载很大,那么所有TT就得满负载工作;如果Cluster将要执行的task不多的话,那么相应地TT也可以减少些task 分配。这种方式我不知道是否妥当,如果很少有job在运行,且task数量不多的时候,有些TT就可以没有task来做闲呆着,不太合适吧。

        因为MapReduce也需要做些推测式task执行或是当失败时task重做的事,所有需要为这样的task做些考虑,只有当集群中TT数大于3台的时候才去做相应地计算,减少分配给当前TT的task数,以备其它需要。

        执行task最高效的方式当然是数据在本地,减少对网络流量的压力,再次些,如果数据不在本地,在同一个rack中,不经过外围交换机,流量还是很高的。所以选择map task时就要考虑数据局部性的影响,如果有这样的task满足它的依赖数据在当前TT的本地磁盘,那么就选择这个task。如果TT中空闲map slot多着,那么尽可能多地执行这种数据局部性强的task。

        但有可能数据放在本DC的其它rack或是再狠些,就在远程其它DC上,那么搬迁数据会给task执行带来很大影响。所有默认scheduling策略规定对于这种远程拉数据的task,每次给TT最大只分派一个,太影响网速了。

        但对于reduce来说,每个TT每次最多指派一个reduce task。reduce task都需要从map task端拉数据,基本都是有网络流量的消耗,所以也没有关于网络拓扑结果的验证。

        每次在检查job中task是否可以分配给TT时,都要判断TT是否满足task所需的内存资源。如map的输出结果,或是reduce的输入数据等。不要等分配到TT后内存有异常才把问题显现出来

        第四步:将选取出的task组装到返回到TT的response中,交付由TT来执行这些task。整个scheduling流程完成。

        在清楚了scheduling细节后,我们试着总结下它的优点与不足
        优点:公平,每个用户的每个job都公平地共享着整个Cluster。
        不足:对实时性job支持不好;不能很好地针对不同用户权限提供不同的计算能力;对于推测式执行等预留task的计算还感觉有问题,等等。但毕竟这只是一个简单的scheduling雏形,不能完全适应企业需求很正常。企业应该针对业务特性,适当调整scheduling策略。


  • 大小: 37.4 KB
0
0
分享到:
评论
1 楼 lance_123 2011-02-19  
FIFO基本没啥优点,除了简单以外。

相关推荐

    MapReduce: Simplified Data Processing on Large Clusters 英文原文

    这是谷歌三大论文之一的 MapReduce: Simplified Data Processing on Large Clusters 英文原文。我的翻译可以见https://blog.csdn.net/m0_37809890/article/details/87830686

    论文:MapReduce: Simplified Data Processing on Large Clusters

    ### MapReduce: 简化的大型集群数据处理 #### 一、引言 《MapReduce: Simplified Data Processing on Large Clusters》这篇论文由Google的研究员Jeffrey Dean和Sanjay Ghemawat撰写,旨在介绍一种名为MapReduce的...

    MapReduce: Simplified Data Processing on Large Clusters中文版

    MapReduce 编程模型简介 MapReduce 是一种编程模型,由 Jeffrey Dean 和 Sanjay Ghemawat 于 2004 年提出,用于处理大规模数据集的分布式计算。该模型将计算任务分解成两个主要阶段:Map 和 Reduce。Map 阶段将...

    MapReduce: Simplified Data Processing on Large Clusters

    ### MapReduce:简化大型集群上的数据处理 #### 概述 MapReduce是一种编程模型及其相应的实现方式,旨在处理和生成大型数据集。该技术由谷歌的Jeffrey Dean和Sanjay Ghemawat提出,用于解决大规模数据处理的问题。...

    MapReduce: Simplified Data Processing on Large Clusters翻译

    ### MapReduce:简化大型集群上的数据处理 #### 概述 MapReduce是一种高效的数据处理模型,主要用于处理和生成大规模数据集。它通过将数据处理任务分解为“映射(Map)”和“归并(Reduce)”两个阶段,极大地简化...

    掌握 MapReduce 核心:ReduceTask 数据处理全解析

    MapReduce 是一种编程模型,用于处理和生成大数据集。它由 Google 在 2004 年提出,并广泛用于大规模数据集的并行处理。MapReduce 模型包含两个主要的函数: 1. **Map 函数**:它接受输入数据并将其转换为中间键值...

    mapreduce:映射学习自我

    mapreduce创建代码项目mvn原型:generate -DarchetypeGroupId = org.apache.maven.archetypes -DgroupId = org.conan.mymahout -DartifactId = myPro -DpackageName = org.conan.mymahout -Dversion = 1.0-SNAPSHOT ...

    MapReduce: Simplified Data Processing on Large Clusters.pdf

    MapReduce programming model MapReduce是Google公司开发的一种编程模型和实现方法,用于处理和生成大规模数据集。该模型允许用户指定一个Map函数,以处理键值对,并生成中间键值对;然后,指定一个Reduce函数,以...

    MapReduce:Fair Scheduler前传

    作业调度器负责在集群的多用户环境下,按照一定的策略分配计算资源,如CPU、内存和存储等。由于MapReduce作业的运行特点,传统的调度算法可能在该环境下表现不佳,主要问题在于数据局部性和Map与Reduce任务之间的...

    MapReduce_ Simplified Data Processing on Large Clusters.pdf

    MapReduce的翻译,我只是个搬运工qwq

    MapReduce:Fair Scheduler PPT分享

    在这个主题中,我们将深入探讨“Fair Scheduler”,这是一个在Hadoop MapReduce中用于资源调度的策略,其目标是实现集群资源的公平分配,提高系统整体效率。 Fair Scheduler的PPT分享将帮助我们理解它的设计理念和...

    MapReduce:超大机群上的简单数据处理

    MapReduce是一种编程模型,专为处理和生成大型数据集而设计。它简化了在超大机群中进行数据处理的复杂性,使程序员无需深入掌握并行分布式处理系统的细节就能编写程序。MapReduce的核心思想是将计算过程分为两个主要...

    MapReduce: Simplified Data Processing on Large Clusters

    Google那篇著名的论文的ppt,MapReduce开山之作,介绍了Google对MapReduce的实现。

    MapReduce:Nkeys,Nfiles终极解决方案.docx

    问题在于,当MapReduce作业(Job)或任务(Task)失败并重试时,可能会产生多个不完整的ORC文件。这不仅浪费存储空间,还可能导致数据一致性问题。为了解决这个问题,我们可以采取以下策略: 1. **取消推测执行**:...

    MapReduce多语言编程1

    MapReduce教程视频,难度不算太高。这个是上半部分,下半部分在下一个资源。。嘿嘿

    MapReduce:股票波动率计算

    在这个特定的案例中,"MapReduce:股票波动率计算"项目利用MapReduce框架来分析纳斯达克股票的波动性,这是一种衡量股票价格变化幅度的重要金融指标。波动率可以帮助投资者了解市场的不确定性,并据此做出投资决策。 ...

    MapReduce:简单字数

    总结来说,“MapReduce:简单字数”指的是使用MapReduce模型来统计文本中的单词数量。通过Map、Shuffle和Reduce三个步骤,这个模型可以高效地处理大规模数据,实现快速准确的词频统计。在实际应用中,MapReduce可以...

    i2MapReduce:用于挖掘不断发展的大数据的增量MapReduce

    i2MapReduce:用于挖掘不断发展的大数据的增量MapReduce

    Dean-2008-Mapreduce.pdf

    MapReduce是一种编程模型,同时也是一种与之相关的实现,用于处理和生成大数据集,适用于各种现实世界中的任务。它由Google的工程师Jeffrey Dean和Sanjay Ghemawat在2004年提出,并在2008年发表。MapReduce的概念和...

Global site tag (gtag.js) - Google Analytics