当前位置: 首页 > 知识库问答 >
问题:

如何优化hadoop作业中的洗牌/排序阶段

越风史
2023-03-14

我正在使用单个节点hadoop作业做一些数据准备。我的作业中的映射器/组合器输出许多键(超过5M或6M),显然作业进行得很慢,甚至失败。映射阶段最多运行120个mapper并且只有一个reducer(这些是自动确定的,我没有为它们设置任何值)。我想优化作业,使洗牌/排序阶段更有效地发生。我将mapreduce.task.io.sort.mb增加到300M,但作业失败了,因为它的值大于映射器堆。然后我将mapred.child.java.opts设置为-xmx1024m,但它再次失败,因为它无法初始化输出收集器。这些场景的最佳实践是什么?

共有1个答案

欧阳勇军
2023-03-14

首先,由于您使用的是单个节点集群,因此没有太多的优化可以做。单个节点集群上的容器/插槽数量有限,对于正在处理的数据量(500万到600万个密钥),作业将始终运行缓慢,而且可能会失败。

我将针对一个完全分布式的Hadoop设置来回答这个问题。在“Hadoop the Definitive Guide”一书中有一节(“Shuffle and Sort”),您应该阅读它来优化Shuffle and Sort阶段。我的回答主要受本节内容的影响,也受我自己调优MapReduce作业的经验的影响。

您可以执行以下操作来实现洗牌和排序效率:

    null
    null
 类似资料:
  • 它是否执行map1,然后按键分区,并将中间数据保存在磁盘(内存)上? 然后读取中间文件2次,一次用于map2 map3分支,第二次用于map4 map5,而不再次计算rddB,即使我们没有在rddB上执行隐式缓存?

  • 我的理解是,在mapreduce编程模型中,我们有映射和减少是两个阶段。完成映射阶段后,将生成中间值(键、值),并将其传递给化简器。 我的怀疑是,在map()阶段之后,洗牌和排序将到来。所以,我觉得洗牌和排序是还原阶段的一部分,是真的吗? 如果是这样的话,组合器()是如何工作的?

  • 在Map Reduce编程中,Reduce阶段包含了shuffling、sorting和Reduce三个子部分。分拣是一件代价高昂的事情。 Map Reduce编程中reducer中的洗牌和排序阶段的目的是什么?

  • 我是hadoop新手,我写了一些作业并将它们导出为jar文件。我可以使用hadoop jar命令运行它们,我想每一小时运行一次这些作业。我该怎么做?提前谢谢。

  • 主要内容:src/runoob/heap/HeapSort.java 文件代码:上一节的堆排序,我们开辟了额外的空间进行构造堆和对堆进行排序。这一小节,我们进行优化,使用原地堆排序。 对于一个最大堆,首先将开始位置数据和数组末尾数值进行交换,那么数组末尾就是最大元素,然后再对W元素进行 shift down 操作,重新生成最大堆,然后将新生成的最大数和整个数组倒数第二位置进行交换,此时到处第二位置就是倒数第二大数据,这个过程以此类推。 整个过程可以用如下图表示: Java 实

  • 假设我有两个进程等待使用抢先最短作业优先(SJF)执行。 在 Time = 2 时,两个进程的突发时间相同,即 3。SJF 排序会运行进程 2,因为它具有更高的初始突发时间,还是会运行进程,因为它们的突发时间当前相同? 谢谢:)