gpt4 book ai didi

java - Spark Driver 内存和 Executor 内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:25 24 4
gpt4 key购买 nike

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

我在我的 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] WARN org.apache.spark.storage.MemoryStore - Not enough space to cache rdd_57_0 in memory! (computed 26.4 MB so far)

任何人都可以指导我这里出了什么问题以及如何提高性能吗?还有如何优化 suffle-spill ?这是我本地系统中发生的泄漏的 View

enter image description here

最佳答案

运行内存过多的执行程序通常会导致垃圾收集延迟过多。所以分配更多的内存不是一个好主意。由于您只有 14KB 数据,因此 2GB 执行程序内存和 4GB 驱动程序内存绰绰有余。分配这么多内存是没有用的。您甚至可以使用 100MB 内存运行此作业,性能将优于 2GB。

在yarn-cluster模式下运行应用程序时,驱动程序内存更有用,因为应用程序主机运行驱动程序。在这里,您正在以本地模式运行您的应用程序 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

提交您的工作。它会顺利运行。

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

Spark on yarn executor resource allocation

关于java - Spark Driver 内存和 Executor 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41645679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com