zoukankan      html  css  js  c++  java
  • 【Spark调优】内存模型与参数调优

    【Spark内存模型】

        Spark在一个executor中的内存分为3块:storage内存、execution内存、other内存。

      1. storage内存:存储broadcast,cache,persist数据的地方。

      2. execution内存:执行内存,join、aggregate、map等shuffle中间结果都缓存在这部分内存中,满了再写入磁盘,能够减少IO。其实map过程也是在这个内存中执行的。

      3. other内存:程序代码执行时预留给自己的内存。

      其中,execution和storage是Spark的Executor中内存的占用大户,other占用内存相对少很多。

    【spark1.6.0之前版本】

      spark1.6.0之前版本,execution和storage的内存分配是独立配置的,使用的参数配置分别是:

    spark.storage.memoryFraction:storage内存占Executor总内存比例,default 0.6。

    spark.shuffle.memoryFraction:execution内存占Executor总内存比例,default 0.2。

      spark1.6.0之前版本,上述两块内存是互相隔离的,无法空闲借用。这就导致了Executor的内存利用率不高,而且需要根据Application的具体情况,使用者自己来调节这两个参数优化Spark的内存使用。

    【spark1.6.0及之后版本】

      spark1.6.0及之后版本,execution内存和storage内存支持合并配置,使用的参数配置分别是:

    spark.memory.fraction“execution内存+storage内存” 占Executor总内存比例,default 0.75。

    spark.memory.storageFraction:storage内存 默认 占Executor总内存比例,default 0.5,如果运行时不够用,且execution内存有空闲,可以借用execution内存。

    execution内存和storage内存可以相互借用,提高了内存的Spark中内存的使用率,同时也减少了OOM的情况。

    【其他】

    1.spark.memory.useLegacyMode:默认值是false,也就是使用上述spark1.6.0及之后版本新的内存管理模型,推荐使用。如果非要想用老的spark1.6.0之前版本老的内存管理模型,配置为true。

    2.如果发现task由于频繁的gc导致运行缓慢(通过spark web ui可以观察到作业的gc耗时),意味着task执行用户代码的内存,也就是上述other内存不够用,尝试调低execution和storage内存看看。

  • 相关阅读:
    恢复IE下载对话框[转]
    意外删除Oracle数据文件(dbf),恢复oralce库的解决办法Oracle错误代码:ORA01033
    [转].net的一些问题
    解决了一个ASP.NET无法接受中文参数值的情况
    修改IIS6的默认设置,扩充上传文件的大小
    在ASP.NET中Request取不到正确的中文参数问题解决办法[base64编码/解码]
    使用微软的TreeView控件有的客户端有脚本错误的问题
    [转]几种调用WebService的方法
    电脑操作精典密芨60式 【转】
    初始化时间下列框的脚本
  • 原文地址:https://www.cnblogs.com/wwcom123/p/10549714.html
Copyright © 2011-2022 走看看