Java 火花驱动器存储器和执行器存储器
我是Spark的初学者,我正在运行我的应用程序从文本字段读取14KB的数据,执行一些转换和操作(收集、收集映射),并将数据保存到数据库 我在macbook上本地运行它,有16G内存,有8个逻辑核 Java最大堆设置为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]警告org.apache.spark.storage.MemoryStore-没有足够的空间进行缓存 内存中的rdd_57_0!(到目前为止已计算出26.4 MB) 有谁能告诉我这里出了什么问题,我如何提高绩效?还有,如何优化萨福克溢油?下面是在我的本地系统中发生的泄漏视图Java 火花驱动器存储器和执行器存储器,java,apache-spark,spark-streaming,spark-submit,Java,Apache Spark,Spark Streaming,Spark Submit,我是Spark的初学者,我正在运行我的应用程序从文本字段读取14KB的数据,执行一些转换和操作(收集、收集映射),并将数据保存到数据库 我在macbook上本地运行它,有16G内存,有8个逻辑核 Java最大堆设置为12G 下面是我用来运行应用程序的命令 bin/spark submit--class com.myapp.application--master local[*]--executor memory 2G--driver memory 4G/jars/application.jar
在本地模式下,您不需要指定master,使用默认参数是可以的。
官方网站说,“spark的bin目录中的spark submit脚本用于在集群上启动应用程序。它可以通过统一的界面使用spark支持的所有集群管理器,因此您不必为每个集群专门配置应用程序。”。因此,您最好在集群中使用spark submit,您可以在本地使用spark shell 运行内存过多的执行器通常会导致过多的垃圾收集延迟。因此,分配更多内存不是一个好主意。由于您只有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
执行器内存1G或以下
在本地模式下,
spark.executor.memory
无效。既然你有16g内存,那就试试看spark.driver.memory
是否超过6g。你试图读取的文件大小是多少?@RajatMishra我试过使用6g驱动内存和8g java max堆。我还是得到了同样的信息。通过spark shell,你可以调试你的应用程序,找出哪一步是错误的。因为应用程序是在本地模式下运行的,你不认为执行器内存没有任何影响,因为工作者生活在驱动程序jvm进程中吗?@RajatMishra是的!!,您是对的,似乎在本地模式下没有使用执行器内存。我会做更多的测试,并相应地更新我的答案:)有人在Spark 2.0+中有关于内存管理的源代码吗,我没有找到任何类似于您提供的伟大源代码。谢谢