当串行执行多个任务时,为什么spark执行器会耗尽内存?

时间:2017-03-04 17:43:44

标签: apache-spark yarn

请参阅后续更新。

请注意我对增加此过程的并行性不感兴趣。我正在尝试了解执行程序内存模型

让我们说我的应用程序被分解为1个阶段(几个映射器,过滤器,将结果存储到hdfs [换句话说,没有减速器]

我们说我有:

  • 10个执行程序(每个执行程序1个核心,每个执行程序5 GB)
  • 10个分区
  • 10个任务(我知道每个任务需要5 GB才能成功完成)

我最终完成了10个任务,每个任务都在执行程序上成功运行。

现在相同的应用程序和相同的设置,但这次我减少了执行程序的数量:

  • 5个执行程序(每个执行程序1个核心,每个执行程序5 GB)
  • 10个分区
  • 10个任务(我知道每个任务需要5 GB才能成功完成)

我还有10个任务。但这次是5个执行器,并行成功执行5个任务。但是当执行程序试图执行第二组任务(任务6-10)时,执行程序试图获得超过指定数量的内存并且纱线将其杀死...

我认为应该发生的是5个任务将成功运行,然后5个任务将成功运行。由于所有任务都相同......

但看起来执行者被迫从执行前5个任务中带来一些内存占用。

跟进

执行程序失败的原因是因为我正在进行大量的字符串操作,并且配置的spark.yarn.executor.memoryOverhead太小(512 MB)。

一旦我解决了这个问题,我就重复了实验,并且能够使用5个执行器成功处理10个任务。

我将这个问题和调查结果留在这里作为文件,以防有人有同样的问题......

0 个答案:

没有答案