我的hadoop输入文件中有大约5000个条目,但我事先知道有些行的处理时间要比其他行长得多(在map阶段)(主要是因为我需要从amazon s3下载一个文件,而且文件的大小会因任务而异)我想确保首先处理最大的map任务,以确保所有hadoop节点大致同时完成工作。有没有办法用hadoop做到这一点?或者我需要重做整件事(我是hadoop新手)谢谢!
rjzwgtxy1#
如果您要实现自定义inputformat(getsplits()方法包含关于split创建的逻辑),那么理论上您可以实现您想要的。但是,您必须特别小心,因为inputformat返回拆分的顺序不是hadoop处理它的顺序。jobclient中有一个拆分的重新排序代码:
// sort the splits into order based on size, so that the biggest // go first Arrays.sort(array, new NewSplitComparator());
这会让整件事变得更棘手。但是您可以实现一个自定义inputformat+一个自定义inputspit,并使inputslip#length()依赖于它的预期执行时间。
1条答案
按热度按时间rjzwgtxy1#
如果您要实现自定义inputformat(getsplits()方法包含关于split创建的逻辑),那么理论上您可以实现您想要的。
但是,您必须特别小心,因为inputformat返回拆分的顺序不是hadoop处理它的顺序。jobclient中有一个拆分的重新排序代码:
这会让整件事变得更棘手。但是您可以实现一个自定义inputformat+一个自定义inputspit,并使inputslip#length()依赖于它的预期执行时间。