4

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

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

有没有办法用 Hadoop 做到这一点?还是我需要重做整个事情?(我是 Hadoop 新手)

谢谢!

4

1 回答 1

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() 取决于其预期的执行时间。

于 2013-08-12T08:50:21.867 回答