我的Hadoop输入文件中有~5000个条目,但事先我知道有些行需要比其他行更长的时间(在地图阶段)。 (主要是因为我需要从Amazon S3下载文件,文件大小因任务而异)
我想确保首先处理最大的地图任务,以确保我的所有hadoop节点大致同时完成工作。
有没有办法用Hadoop做到这一点?或者我需要重做整件事吗? (我是Hadoop的新手)
谢谢!
答案 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()依赖于其预期的执行时间。