系统相关
首页 > 系统相关> > java – Spark驱动程序内存和执行程序内存

java – Spark驱动程序内存和执行程序内存

作者:互联网

我是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 – Not enough space to cache
rdd_57_0 in memory! (computed 26.4 MB so far)

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

enter image description here

解决方法:

运行具有太多内存的执行程序通常会导致过多的垃圾收集延迟.分配更多内存并不是神的想法.由于你只有14KB数据2GB执行器内存和4GB驱动内存绰绰有余.没有使用分配这么多的内存.您可以使用100MB内存运行此作业,性能将优于2GB.

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

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

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

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

这个不好.操作系统本身消耗大约1GB内存,您可能运行其他也消耗RAM内存的应用程序.所以在这里你实际上分配了更多的内存.这是您的应用程序抛出错误的根本原因没有足够的空间来缓存RDD

>没有使用将Java堆分配到12 GB将其重新设置为4GB或更少.
>将执行程序内存减少到执行程序内存1G或更少
>由于您在本地运行,请从配置中删除驱动程序内存.

提交你的工作.它会顺利运行.

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

Spark on yarn executor resource allocation

标签:java,apache-spark,spark-streaming,spark-submit
来源: https://codeday.me/bug/20190519/1133902.html