zoukankan      html  css  js  c++  java
  • Spark2.0.0内存管理

    来源:http://spark.apache.org/docs/2.0.0/configuration.html

    spark中的内存使用主要分为两类:执行和存储。执行内存指的是用于shuffles、join、sorts 和aggregations中的计算的内存,而存储内存指的是用于在集群中cache和广播变量数据的内存。

    在Spark中,执行和存储共享一个统一的区域(M)。当不使用执行内存时,存储可以获取所有可用内存,反之亦然。执行可以在必要时清理存储内存,但只能在总存储内存使用量低于某个阈值(R)之前执行。换句话说,R描述了M中的一个子区域,其中缓存的块永远不会被移出。由于实现的复杂性,存储可能无法收回执行。


    这种设计确保了几种理想的特性。首先,不使用缓存的应用程序可以使用整个空间来执行,从而避免不必要的磁盘溢写。第二,确实使用缓存的应用程序可以保留一个最小的存储空间(R),使其数据块不会被逐出。最后,这种方法为各种工作负载提供了合理的开箱即用的性能,而不需要用户了解内存如何在内部划分。

     
    名称 默认值

    说明

    spark.memory.fraction 0.6

    实际大小:(heap space - 300MB)* 0.6,用于存储和执行。(剩下的0.4用于Task计算)

    这个值越小,发生溢写和缓存清理的频率就越高。

    此配置的目的是为内部元数据、用户数据结构和不精确的大小估计预留内存,以防出现稀疏、异常大的记录。

    建议保留默认配置。

    spark.memory.storageFraction 0.5

    不受缓存清理影响存储内存。

    是spark.memory.fraction的一部分。

    这个值越大,工作内存就越小,越容易发生溢写磁盘。

    建议保留默认配置

    spark.memory.offHeap.enabled false

    设为true,将使用堆外内存,同时spark.memory.offHeap.size必须要设置值

    spark.memory.offHeap.size 0

    可用于堆外分配的绝对内存量。

    此设置对堆内存使用没有影响,因此,如果executor的总内存消耗必须在某个固定的限制内,那么一定要相应地减少JVM堆大小。

    spark.memory.useLegacyMode false

    ​是否启用Spark 1.5及之前使用的内存管理模式。

    静态内存管理模式将堆空间严格划分为固定大小的区域,如果不调整应用程序,可能会导致溢出。

    spark.shuffle.memoryFraction 0.2

      spark.memory.useLegacyMode为true时才生效。用于shuffle的聚合。

    spark.storage.memoryFraction 0.6

     spark.memory.useLegacyMode为true时才生效。用于内存缓存。不应大于JVM中“老年代”对象。

    spark.storage.unrollFraction 0.2

     spark.memory.useLegacyMode为true时才生效。用于在内存中展开块。

  • 相关阅读:
    计算几何 判断点在直线的左右哪一侧
    图论 迪杰斯特拉dijkstra求最短路径
    图论 用prim法求最小生成树
    图论 邻接表广搜
    图论 用广搜搜邻接矩阵
    图论 邻接表建图+dfs
    图论 邻接矩阵建图+dfs遍历
    HDU 2141 二分查找
    二叉树知道前序和中序求后序,知道中序后序求中序
    二叉树的查找
  • 原文地址:https://www.cnblogs.com/144823836yj/p/10766744.html
Copyright © 2011-2022 走看看