Hadoop映射任务的执行顺序/优先级

时间:2013-08-12 06:11:49

标签: hadoop mapreduce priority-queue hadoop-partitioning

我的Hadoop输入文件中有~5000个条目,但事先我知道有些行需要比其他行更长的时间(在地图阶段)。 (主要是因为我需要从Amazon S3下载文件,文件大小因任务而异)

我想确保首先处理最大的地图任务,以确保我的所有hadoop节点大致同时完成工作。

有没有办法用Hadoop做到这一点?或者我需要重做整件事吗? (我是Hadoop的新手)

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您要实现自定义的InputFormat(getSplits()方法包含有关拆分创建的逻辑),那么从理论上讲,您可以实现您想要的效果。

但是,您必须特别小心,因为InputFormat返回拆分的顺序不是Hadoop处理它的顺序。 JobClient中有一个拆分重新排序代码:

// sort the splits into order based on size, so that the biggest
// go first
Arrays.sort(array, new NewSplitComparator());

这将使整个事情变得更加棘手。 但您可以实现自定义InputFormat +自定义InputSplit,并使InputSlip #length()依赖于其预期的执行时间。