一种MapReduce动态设定slots数量的方法
【专利摘要】本发明提供一种MapReduce动态设定slots数量的方法,包括以下步骤:首先根据集群中的节点计算能力设定slots数量;然后再根据每个节点中的内存情况适当地调整slots的数量。该一种MapReduce动态设定slots数量的方法和现有技术相比,可以提升mapreduce程序运行性能,优化资源的合理利用,实用性强,易于推广。
【专利说明】—种MapReduce动态设定slots数量的方法
【技术领域】
[0001]本发明涉及计算机【技术领域】,具体的说是一种MapReduce动态设定slots数量的方法。
【背景技术】
[0002]如今的互联网技术不断发展,数据成爆炸式增长,网络上数据规模急剧增加,混乱的数据中蕴藏着巨大的商机,可以从海量的数据中提取价值。但随之而来的问题是单机的数据处理能力无法满足当今海量数据应用的处理要求,基于大规模计算集群的分布式计算成为未来数据性能提升的主要途径。针对Hadoop的核心技术MapReduce计算模型进行研究,针对MapReduce中每个节点中默认设定相同个数的map、reduce数量问题提出了一种MapReduce动态设定slots数量的策略。根据集群中不同节点的硬件配置不同设置不同的map数量和reduce数量。
[0003]目前对于mapreduce中map个数和reduce个数设定如下:map task的数量即mapred.tasktracker.map.tasks, maxi mu 的参数值,但一个 TaskTracker 能配置多少个slot,还是与它的物理环境有关。每个task是由新启动的JVM独立执行,有多个task的时候就会有多个JVM,每个JVM消耗一部分内存,再加上DataNode和TaskTracker的内存消耗,机器内存可能就会不够用。这样除了考虑调配每个新启动JVM的内存限制外,还得关注下到底需要多少个新启动JVM,也就是map slot和reduce slot的数目。它们的设置还与机器的处理器数目有关。具体的配置还得从集群的实际运行效果来观察和分析。Input Split的大小,决定了一个Job拥有多少个map。然而,如果输入的数据量巨大,那么默认的block会有几万甚至几十万的Map Task,集群的网络传输会很大,最严重的是给Job Tracker的调度、队列、内存都会带来很大压力。因此要设定适当地符合机器计算能力的slots数量。
[0004]在Hadoop中,使用slot表示各个TaskTraker上的资源,一个slot代表固定的资源组合,在执行mapreduce程序时,每个TaskTracker上的Map slot个数及Reduce slot个数是通过 mapred.tasktracker.map.tasks, maximum 和 mapred.tasktracker.reduce,tasks, maximum进行配置。这两个参数一旦配置后,不能动态修改。由于不同作用的任务需要的资源量不同,集群中的节点硬件配置也不尽相同,因此,针对节点资源的不同,提出一种MapReduce动态设定slots数量的策略。该策略可以根据节点计算能力动态设定slot数量,提高MapReduce程序执行的性能。
【发明内容】
[0005]本发明的技术任务是解决现有技术的不足,提供一种MapReduce动态设定slots数量的方法。
[0006]本发明的技术方案是按以下方式实现的,该一种MapReduce动态设定slots数量的方法,其具体设定过程为:首先确定集群节点中CPU的数量,然后根据每个节点中CPU的核心的数量由主从模式框架MapReduce动态设定决定slots数量:根据job队列和TaskTracker节点的资源情况作为输入,其中TaskTracker的资源情况包括CPU的核心数量及节点的内存大小,然后再根据节点的计算能力设定slots数量;
在主-从模式框架MapReduce的主节点上运行JobTracker,其负责监控机群,任务调度;从节点上运行TaskTracker,其负责监控任务执行,报告进度;
TaskTracker定期向JobTracker发送心跳信息,该信息中携带本节点的资源使用情
况;
在心跳到达时,主节点中的调度发生,若TaskTracker报告自己有空闲资源,则JobTracker使用调度算法选择一个任务发射到该节点运行。
[0007]在设定slots数量时需要设计两个变量,一个是map slot,—个是reduce slot:首先修改TaskTracker中的代码,将map slot数量初步设定为节点中CPU的核心数量,reduce slot数量初步设定为节点中CPU的核心数量的一半;然后在类方法中,根据slots数量来决定申请内存的大小,task的总内存分配大小等于map slot数量与TaskTracker中单个map slot内存大小之积再加上resuce slot数量与TaskTracker中单个reduce slot内存大小之积;如果task的总内存分配与集群中相应节点的剩余内存相比小,则将slots设定为该值;如果task的总内存分配与集群中相应节点的剩余内存小,贝U减少map slot数量或reduce slot数量,交替的较少slots数量,直到满足节点中内存条件为止。
[0008]本发明与现有 技术相比所产生的有益效果是:
本发明的一种MapReduce动态设定slots数量的方法通过分析Hadoop集群中节点的计算能力,利用每个节点的CPU及内存情况确定出slots数量,然后根据该数量得到合理的map数量及reduce数量,该策略使得整个集群处理MapReduce任务的性能大大提升,并优化资源的合理利用,实用性强,易于推广。
【专利附图】
【附图说明】
[0009]附图1是本发明的作业job执行流程图。
[0010]附图2是本发明的设定slots数量的流程图。
【具体实施方式】
[0011]下面结合附图对本发明的一种MapReduce动态设定slots数量的方法作以下详细说明。
[0012]本发明涉及当前大数据Hadoop集群中MapReduce急需解决的一个重要问题,即根据集群中节点硬件配置不同、计算能力不同动态设定map、reduCe数量的问题。通过本方法提出的MapReduce动态设定slots数量的策略,该策略可以有效解决动态设定slots数量的问题,并使整个集群处理MapReduce任务的性能大大提升。
[0013]本发明依赖于主-从模式框架MapReduce,该框架采用Master/Slave的架构,它主要有以下4个部分组成:
I) Client。
[0014]2) JobTracker:JobTracke负责资源监控和作业调度。JobTracker监控所有TaskTracker与job的健康状况,一旦发现失败,就将相应的任务转移到其他节点;同时,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器。
[0015]3) TaskTracker:TaskTracker会周期性地通过Heartbeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。TaskTracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。一个Task获取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot 分为 Map slot 和 Reduce slot 两种,分别供 MapTask 和 Reduce Task 使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。
[0016]4) Task:Task 分为 Map Task 和 Reduce Task 两种,均由 TaskTracker 启动。HDFS以固定大小的block为基本单位存储数据,而对于MapReduce而言,其处理单位是split。split是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split的多少决定了 Map Task的数目,因为每个split只会交给一个Map Task处理。
[0017]如附图1、图2所示,本发明提供的一种MapReduce动态设定slots数量的方法,该策略主要是根据集群节点中计算能力来设定slots数量,节点计算能力是根据CPU个数及内存两个因素所确定的。首先确定集群节点中CPU的数量,然后根据每个节点中CPU的核心的数量决定slots数量,这样可以根据不同节点计算能力来处理任务,使得mapreduce任务更高效的执行,提高性能。MapReduce动态设定slots数量的策略中内存因素,是根据slots数量来决定申请内存的大小,再根据节点的内存情况相应的调整slots数量,若在申请过程中内存不足时则可以减少slots数量知道达到内存条件,反之将slots数量设定为依据CPU数量设定的slots数量,最终根据slots数量确定mapreduce数量。其具体设定过程为:
首先确定集群节点中CPU的数量,然后根据每个节点中CPU的核心的数量由主从模式框架MapReduce动态设定决定slots数量:根据job队列和TaskTracker节点的资源情况作为输入,其中TaskTracker的资源情况包括CPU的核心数量及节点的内存大小,然后再根据节点的计算能力设定slots数量;
在主-从模式框架MapReduce的主节点上运行JobTracker,其负责监控机群,任务调度;从节点上运行TaskTracker,其负责监控任务执行,报告进度;
TaskTracker定期向JobTracker发送心跳信息,该信息中携带本节点的资源使用情
况;
在心跳到达时,主节点中的调度发生,若TaskTracker报告自己有空闲资源,则JobTracker使用调度算法选择一个任务发射到该节点运行。
[0018]在设定slots数量时需要设计两个变量,一个是map slot,—个是reduce slot:首先修改TaskTracker中的代码,将map slot数量初步设定为节点中CPU的核心数量,reduce slot数量初步设定为节点中CPU的核心数量的一半;然后在类方法中,根据slots数量来决定申请内存的大小,task的总内存分配大小等于map slot数量与TaskTracker中单个map slot内存大小之积再加上resuce slot数量与TaskTracker中单个reduce slot内存大小之积;如果task的总内存分配与集群中相应节点的剩余内存相比小,则将slots设定为该值;如果task的总内存分配与集群中相应节点的剩余内存小,贝U减少map slot数量或reduce slot数量,交替的较少slots数量,直到满足节点中内存条件为止。
[0019]本发明的目的是针对分布式计算框架来动态设定slots数量。该策略的思想是根据Hadoop集群中每个节点的计算能力不同来动态设定slots数量。从节点拥有的CPU与内存情况来设定map数量与reduce数量,该技术问题是将节点中CPU数量与slots数量合理的联系起来;通过内存的限定约束slots的数量,使得能符合集群中节点的处理能力,使得任务更高效。
[0020]节点中CPU数量与slots数量合理的联系中,统计每个节点的CPU数量,将slots数量设置成节点中CPU的core数量,因为每个core可以单独处理一个Task,而不用等待,在map Task或reduce Task执行时很会快速的执行。
[0021]在内存限定约束中,可以根据slots数量来决定申请内存的大小,再根据节点的内存情况相应的调整slots数量,若在申请过程中内存不足时则可以减少slots数量,直到达到内存限制的要求,反之将slots数量设定为依据CPU数量设定的slots数量。
[0022]下面参照附图1和附图2,对本发明的内容以一个具体实例来详细描述。
[0023]首先部署分布式集群环境,使用具有11个节点的Hadoop机群,其中一个节点作为master,其余十个作为slave.其中10个节点均采用Xeon E5-2620 i 2.0OGHz CPU,core的数量是24,96GB内存,12*2T硬盘,操作系统是centos6.3,另外一个节点配置是 Xeon E7- 8837 i 2.67GHz CPU, core 的数量是 128,500GB 内存,5*2T 硬盘,操作系统是centos6.3。在操作系统是centos6.3上按照官方文档安装hadoop组件。然后将hdfs、mapreduce 服务开启。
[0024]作业job执行流程图如附图1所示,首先确定MapReduce的输入文件或目录应该在File system上存在,如果MapReduce依赖于HDFS,就得先将本地的文件上传到HDFS上。Client会向JobTracker申请一个Jobid来作为job的标识符。然后MapReduce就需要将job执行必要的资源文件复制到HDFS上。接下来才是作业job提交过程,对输入文件做数据分片(input split)。数据分片是为了在mapper执行之前就确定它处理数据的范围,并且分片的数量决定map task的数量,它们之间一一对应。这种数据分片(split)只是逻辑分片,记录它应当访问哪个block,及在这个block上的起始index及数据长度的信息。然后初始化作业,JobTracker将负责分发任务给TaskTracker, TaskTracker在运行时会周期性地向JobTracker发送心跳请求,汇报TaskTracker的状态数据、TaskTracker上task执行状态及希望从JobTracker得到可以执行的task。而在真正TaskTracker节点中运行的map数量和reduce数量是由map slots和reduce slots数量决定的。因此,根据集群中相应节点的计算能力确定每个节点中map slots和reduce slots数量很重要,直接影响着任务的运行效率。
[0025]设定slots数量的流程图如附图2所示,首先获取集群中的每个节点的CPU的core数量,map slot数量初步设定为节点中CPU的core数量,reduce slot数量初步设定为节点中CPU的core数量的一半;然后获取每个节点中的剩余内存大小,在类方法initializeMemoryManagement O中,根据slots数量来决定申请内存的大小,task的总内存分配大小等于map slot数量与TaskTracker中单个map slot内存大小之积再加上reduce slot数量与TaskTracker中单个reduce slot内存大小之积。如果task的总内存分配与集群中相应节点的剩余内存相比小,则将map s1ts设定为节点中CPU的core数量,reduce slot数量为map slot数量的一半;否则如果task的总内存分配与集群中相应节点的剩余内存小,则减少map slot数量或reduce slot数量,交替的较少slots数量,直到满足节点中内存条件为止,这时map slots设定为满足条件的map slots数量,reduce slot数量为满足条件的reduce slots数量。然后根据根据类方法TaskTracker.1nitialize O中两个TaskLauncher线程,分别负责启动Mapper和Reduce任务,在TaskLauncher中需要传入相应slots数量,然后执行相应的Task,如map task或reduce task。在执行结束后,释放所占有的资源。该方法将节点的计算能力用CPU的core数量及内存大小来决定的,对于节点中CPU的core数量多且内存大的节点设置较大的map和reduce数量,对于一些节点中CPU的core数量少且内存相对较少的节点设置较小的map和reduce数量。在该集群中,采用Xeon E5-2620 i 2.0OGHz CPU, core的数量是24,96GB内存的10个节点均将map设置为24,reduce设置为12。另一个节点配置是Xeon E7- 8837 @ 2.67GHzCPU, core的数量是128,500GB内存,将map设置为128,reduce为64。这样的设置比每个机器节点设置的map数量和reduce数量的任务执行效率高,同时达到优化资源的合理利用。
[0026]以上所述仅为本发明的实施例而已,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种MapReduce动态设定slots数量的方法,其特征在于其具体设定过程为: 首先确定集群节点中CPU的数量,然后根据每个节点中CPU的核心的数量由主从模式框架MapReduce动态设定决定slots数量:根据job队列和TaskTracker节点的资源情况作为输入,其中TaskTracker的资源情况包括CPU的核心数量及节点的内存大小,然后再根据节点的计算能力设定slots数量; 在主-从模式框架MapReduce的主节点上运行JobTracker,其负责监控机群,任务调度;从节点上运行TaskTracker,其负责监控任务执行,报告进度; TaskTracker定期向JobTracker发送心跳信息,该信息中携带本节点的资源使用情况; 在心跳到达时,主节点中的调度发生,若TaskTracker报告自己有空闲资源,则JobTracker使用调度算法选择一个任务发射到该节点运行。
2.根据权利要求1所述的一种MapReduce动态设定slots数量的方法,其特征在于:在设定slots数量时需要设计两个变量,一个是map slot,—个是reduce slot:首先修改TaskTracker中的代码,将map slot数量初步设定为节点中CPU的核心数量,reduce slot数量初步设定为节点中CPU的核心数量的一半;然后在类方法中,根据slots数量来决定申请内存的大小,task的总内存分配大小等于map slot数量与TaskTracker中单个mapslot内存大小之积再加上resuce slot数量与TaskTracker中单个reduce slot内存大小之积;如果task的总内存分配与集群中相应节点的剩余内存相比小,则将slots设定为该值;如果task的总内存分配与集群中相应节点的剩余内存小,贝U减少map slot数量或reduce slot数量,交替的较少slots数量,直到满足节点中内存条件为止。
【文档编号】G06F9/48GK103761146SQ201410004521
【公开日】2014年4月30日 申请日期:2014年1月6日 优先权日:2014年1月6日
【发明者】宗栋瑞, 郭美思 申请人:浪潮电子信息产业股份有限公司