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
Java 火花驱动器存储器和执行器存储器_Java_Apache Spark_Spark Streaming_Spark Submit - Fatal编程技术网

Java 火花驱动器存储器和执行器存储器

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

我是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)

有谁能告诉我这里出了什么问题,我如何提高绩效?还有,如何优化萨福克溢油?下面是在我的本地系统中发生的泄漏视图


在本地模式下,您不需要指定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

  • 将Java堆分配到12GB是没有用的。您需要将其减少到4GB或更低
  • 将执行器内存减少到
    执行器内存1G或以下
  • 由于您正在本地运行,请从配置中删除驱动程序内存
  • 提交你的工作。它将运行平稳

    如果您非常想了解spark内存管理技术,请参阅这篇有用的文章


    在本地模式下,
    spark.executor.memory
    无效。既然你有16g内存,那就试试看
    spark.driver.memory
    是否超过6g。你试图读取的文件大小是多少?@RajatMishra我试过使用6g驱动内存和8g java max堆。我还是得到了同样的信息。通过spark shell,你可以调试你的应用程序,找出哪一步是错误的。因为应用程序是在本地模式下运行的,你不认为执行器内存没有任何影响,因为工作者生活在驱动程序jvm进程中吗?@RajatMishra是的!!,您是对的,似乎在本地模式下没有使用执行器内存。我会做更多的测试,并相应地更新我的答案:)有人在Spark 2.0+中有关于内存管理的源代码吗,我没有找到任何类似于您提供的伟大源代码。谢谢