Spark Driver Memory和Executor Memory

时间:2017-01-14 00:59:14

标签: java apache-spark spark-streaming spark-submit

我是Spark的初学者,我正在运行我的应用程序从文本字段中读取14KB数据,执行一些转换和操作(收集,收集地图)并将数据保存到数据库

我在我的macbook中本地运行16G内存,有8个逻辑内核。

Java Max堆设置为12G。

这是我用来运行应用程序的命令。

bin / spark-submit --class com.myapp.application --master local [*] - executor-memory 2G --driver-memory 4G /jars/application.jar

我收到以下警告

  

2017-01-13 16:57:31.579 [Executor task launch worker -8hread] WARN org.apache.spark.storage.MemoryStore - 没有足够的空间来缓存   rdd_57_0在内存中! (到目前为止计算的26.4 MB)

任何人都可以指导我这里出了什么问题,如何提高性能?还有如何优化漏斗?以下是我本地系统中发生的泄漏的视图

enter image description here

2 个答案:

答案 0 :(得分:6)

运行内存过多的执行程序通常会导致过多的垃圾回收延迟。分配更多内存并不是神的想法。由于你只有14KB数据2GB执行器内存和4GB驱动程序内存绰绰有余。没有使用分配这么多的内存。你可以用100MB的内存来运行这个工作,性能会比2GB更好。

在运行应用程序时,驱动程序内存更有用,在纱线群集模式下,因为应用程序主机运行驱动程序。在这里,您以本地模式运行应用程序driver-memory不是必需的。您可以从作业中删除此配置。

在您的应用程序中,您已分配

Java Max heap is set at: 12G.
executor-memory: 2G 
driver-memory: 4G

总内存分配= 16GB,而你的macbook只有16GB内存。 在这里,您已将总RAM内存分配给spark应用程序。

这不好。操作系统本身消耗大约1GB内存,您可能运行其他也消耗RAM内存的应用程序。所以在这里你实际上分配了更多的内存。这是您的应用程序抛出错误Not enough space to cache the RDD

的根本原因
  1. 没有使用将Java堆分配给12 GB将其重新设置为4GB或更少。
  2. 将执行程序内存减少到executor-memory 1G或更少
  3. 由于您在本地运行,请从配置中删除driver-memory
  4. 提交你的工作。它会顺利运行。

    如果您非常希望了解火花记忆管理技术,请参阅这篇有用的文章。

    Spark on yarn executor resource allocation

答案 1 :(得分:-1)

在本地模式下,您不需要指定master,使用默认参数就可以了。 官方网站称,“Spark的bin目录中的spark-submit脚本用于在集群上启动应用程序。它可以通过统一的界面使用Spark支持的所有集群管理器,因此您不必为每个集成管理器专门配置应用程序。一个。“。所以你最好在群集中使用spark-submit,在本地你可以使用spark-shell。