Mapreduce任务调度中的任务时间评估策略

来源:互联网 发布:vs怎么写c语言 编辑:程序博客网 时间:2024/05/24 03:36

Mapreduce任务调度中的任务时间评估

    在异构环境中Mapreduce作业的运行时间预测或者评估是基于deadline的调度中比较关键的一部分。 在文献[1-2]中调度依据文件的剩余时间。两种方法都不同,文献[1]假设Hadoop系统运行于一个同构的环境中且任务的执行时间与输入数据成线性关系,对样本数据进行求解,得到程序运行的平均时间。因此,作业的运行时间可以是:

T =s*c/n  其中s是作业输入数据的大小,c是数据的单元处理时间,n是任务的个数。这种方法优势在于简单易用,但劣势也比较明显:首先,不能适应于异构环境的需要;其次,在样本数据不分布不均的情况下数据的单元处理时间会很不正确。

LATE[3]算法中所采用的时间预测公式是:

               

其中 ,T为任务当前所使用的时间;ProgressScore为Hadoop默认的任务进度值,ProgressRate=ProgressScore/T(T为执行时间)。

在文献[2]中提到了在动态环境中的作业时间计算方法。

定义:表示作业m的第i个任务;指执行任务的时间;为作业m已经完成的任务集合。

那么,对于作业m,已完成的任务所用的平均时间为:

                   

那么,对于任务的剩余时间可以近视为:  ,其中已执行时间在动态环境中的值是不断变化的。这种预测剩余时间的方法比前面一种要好。但是,在异构的环境中显得不那么准确,如果只是用平均时间作为所有任务的执行时间,因为,异构环境中节点的计算能力会存在很大的不同。

以上的评估策略都是针对通用的hadoop作业。对于查询式的作业(如pig、hive),往往几个作业联合起来为了完成查询功能的。因此,这些作业间存在数据依赖关系,对于它们的运行时间评估就可以得到整个查询操作的进度。文献[4,5]是最早提出针对pig的运行时间评估。

文献[4]提出对于查询任务的剩余时间计算公式:

其中,   是剩余未启动的任务的开销;是减速因子(slowdown factor);是每个元组的处理时间;Njp是指任务的输入数据的元组数;Kjp 指已经处理的元组数;文中将一个任务的执行过程(read splitsmap或者combinecopyreduce)称为一个pipeline。那么对于一个作业来说,同时执行的map数就是,是平均的同时执行的任务数。J是作业的集合,Pj 是指作业j的pipeline的集合。

那么,任务的剩余百分比就是:

文献[5]是在[4]的基础上提出了基于DAG关键路径的时间评估(Critical-Path-Based Progress Estimation)。

 

 

参考文献

 

[1 ] Scheduling Hadoop Jobs to Meet Deadlines

[2] Performance-Driven Task Co-Scheduling for MapReduceEnvironments

[3] Improving MapReduce Performance in HeterogeneousEnvironments

[4] Estimating the Progress of MapReduce Pipelines

[5] ParaTimer A Progress Indicator for MapReduce DAGs

[6]analyzing and Adjusting User Runtime Estimates toImprove

[7]Are user runtime estimates inherently inaccurate

[8]Modeling User Runtime Estimates