mapreduce—hadoopMap任务的执行顺序/优先级

cwdobuhd  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(420)

我的hadoop输入文件中有大约5000个条目,但我事先知道有些行的处理时间要比其他行长得多(在map阶段)(主要是因为我需要从amazon s3下载一个文件,而且文件的大小会因任务而异)
我想确保首先处理最大的map任务,以确保所有hadoop节点大致同时完成工作。
有没有办法用hadoop做到这一点?或者我需要重做整件事(我是hadoop新手)
谢谢!

rjzwgtxy

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()依赖于它的预期执行时间。

相关问题