我是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)
任何人都可以指导我这里出了什么问题,我怎样才能提高性能?还有如何优化漏斗?这是我本地系统中发生的泄漏的视图
运行具有太多内存的执行程序通常会导致过多的垃圾收集延迟.分配更多内存并不是神的想法.由于你只有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
没有使用将Java堆分配到12 GB将其重新设置为4GB或更少.
将执行程序内存减少到executor-memory 1G
或更少
由于您在本地运行,请driver-memory
从配置中删除.
提交你的工作.它会顺利运行.
如果您非常希望了解火花记忆管理技术,请参阅这篇有用的文章.
Spark on yarn executor资源分配