如果我的服务器有50GB内存,Hbase使用40GB。当我运行Spark时,我将内存设置为--executor-memory 30G
。所以Spark会从Hbase中获取一些内存,因为只剩下10GB。
另外一个问题,如果Spark只需要1GB内存,但我给了Spark 10G内存,将Spark占用10GB内存。
答案 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个执行程序,而这是您的驱动程序,因此您需要增加驱动程序的内存。
如果您使用独立模式并以群集模式提交作业,则以下内容适用: -
--executor-memory
是每个执行者所需的内存。它是执行者堆大小。默认情况下,60%的已配置--executor-memory用于缓存RDD。其余40%的内存可用于任务执行期间创建的任何对象。这相当于-Xms和-Xmx。因此,如果您提供更多可用的内存,那么执行程序将显示有关内存不足的错误。答案 1 :(得分:0)
当你给Spark执行器30G内存时,操作系统不会给它实际的物理内存。但是,当您的执行程序需要实际内存来缓存或处理时,这将导致您的其他进程(如hbase)继续交换。如果您的系统交换设置为零,那么您将面临OOM错误。
操作系统交换进程的空闲部分,这可能会使您的进程表现得非常慢。