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



我的Hadoop输入文件中有大约5000个条目,但我事先知道其中一些行的处理时间要比其他行长得多(在映射阶段)。(主要是因为我需要从AmazonS3下载一个文件,文件的大小会因任务而异)

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

Hadoop有办法做到这一点吗?还是我需要重做整个东西?(我是Hadoop新手)

谢谢!

如果您要实现自定义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()取决于它的预期执行时间。

相关内容

  • 没有找到相关文章

最新更新