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

标签 hadoop mapreduce priority-queue hadoop-partitioning

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

我想确保首先处理最大的 map 任务,以确保我的所有 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() 取决于其预期执行时间。

关于hadoop - Hadoop 映射任务的执行顺序/优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18180547/

相关文章:

algorithm - 持续更新优先级队列的最佳算法/数据结构

scala - 将 Spark 流数据写入并附加到 HDFS 中的文本文件

java - HBase:如何在单个扫描操作中指定多个前缀过滤器

r - 如何将数据从SparkR插入到hadoop集群中的Hbase

algorithm - 关于网页排名的疑问

c# - 混合预计算和延迟加载

hadoop - 如何在 PIG 脚本中将 Columns 本身作为参数传递

hadoop - 当某些键集的值过多时如何平衡 reducer ?

hadoop - Mapreduce 失败日志 Hadoop

Java PriorityQueue Comparator 在特定条件下插入二维数组