【问题标题】:How does Spark occupy the memorySpark如何占用内存
【发布时间】:2016-02-19 17:35:48
【问题描述】:

如果我的服务器有 50GB 内存,Hbase 使用的是 40GB。当我运行 Spark 时,我将内存设置为 --executor-memory 30G。 Spark 也会从 Hbase 中获取一些内存,因为只剩下 10GB 了。 还有一个问题,如果Spark只需要1GB内存,但我给了Spark 10G内存,Spark会占用10GB内存吗?

【问题讨论】:

  • 部分回答了您的问题。要获得完整的解决方案,您需要添加更多有关环境的信息,并且当您说我给 Spark 10G 内存时,您指的是哪个参数?请在您的问题中添加相同的内容,我将详细说明提供的回复。

标签: apache-spark


【解决方案1】:

根据部署模式,行为会有所不同。如果您使用的是本地模式,那么--executor-memory 不会改变任何东西,因为您只有 1 个 Executor 并且那是您的驱动程序,因此您需要增加驱动程序的内存。

如果您使用独立模式并以集群模式提交作业,则以下内容适用:-

  1. --executor-memory 是每个执行程序所需的内存。它是执行者堆大小。默认情况下,配置的 --executor-memory 的 60% 用于缓存 RDD。剩余 40% 的内存可用于任务执行期间创建的任何对象。这等效于 -Xms 和 -Xmx。因此,如果您提供了更多可用内存,那么您的执行程序将显示内存不足的错误。

【讨论】:

    【解决方案2】:

    当你给 Spark executor 30G 内存时,OS 不会给它实际的物理内存。但是当您的执行程序需要实际内存来缓存或处理时,这将导致您的其他进程(如 hbase)继续交换。如果您的系统交换设置为零,那么您将面临 OOM 错误。

    操作系统交换出进程的空闲部分,这可能会使您的进程运行得很慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2017-10-01
      • 2015-10-26
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多