Spark如何占据内存

时间:2016-02-19 03:30:42

标签: apache-spark

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

2 个答案:

答案 0 :(得分:0)

根据部署模式,行为会有所不同。如果您使用的是本地模式,那么<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <select id="category"> <option value="">Select Category</option> </select> <select id="subcategory"> <option value=""></option> </select>将不会更改任何内容,因为您只有1个执行程序,而这是您的驱动程序,因此您需要增加驱动程序的内存。

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

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

答案 1 :(得分:0)

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

操作系统交换进程的空闲部分,这可能会使您的进程表现得非常慢。