Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 当连续执行多个任务时,为什么spark executor会耗尽内存?_Apache Spark_Yarn - Fatal编程技术网

Apache spark 当连续执行多个任务时,为什么spark executor会耗尽内存?

Apache spark 当连续执行多个任务时,为什么spark executor会耗尽内存?,apache-spark,yarn,Apache Spark,Yarn,请参阅后续更新 请注意,我对增加此过程的并行性不感兴趣。我试图理解执行器内存模型 假设我的应用程序被分解为1个阶段(几个映射器、过滤器、将结果存储到hdfs[换句话说,没有还原器]) 假设我有: 10个执行器(每个执行器1个内核,每个执行器5 GB) 10个分区 10个任务(我知道每个任务需要5 GB才能成功完成) 我最终完成了10个任务,每个任务都在一个执行器上成功运行 现在相同的应用程序和相同的设置,但这次我减少了执行者的数量: 5个执行器(每个执行器1个内核,每个执行器5 GB) 1

请参阅后续更新

请注意,我对增加此过程的并行性不感兴趣。我试图理解执行器内存模型

假设我的应用程序被分解为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.warn.executor.memoryOverhead
太小(512 MB)

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

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