Spark程序优化

1.gc时间过长

在spark ui上的现象是时间过长且gc的时间比较长,现象截图以下:缓存

image

image

原理分析数据结构

平常使用中,咱们经过spark.executor.memory来控制一个executor最多能够使用的内存大小,其实是经过设置Executor的JVM的Heap大小实现的。ui

Executor的内存界限分明,分别由3部分组成:execution,storage和system。spa

  1. execution
    execution空间经过设置spark.shuffle.memoryFraction参数来控制大小,默认为0.2。为了不shuffle,join,排序和聚合这些操做直接将数据写入磁盘,所设置的buffer大小,减小了磁盘读写的次数。3d

  2. storage
    storage空间经过设置spark.storage.memoryFraction参数来控制大小,默认为0.6。用于存储用户显示调用的persist,cache,broadcast等命令存储的数据空间。code

  3. system
    程序运行须要的空间,存储一些spark内部的元数据信息,用户的数据结构,避免一些不寻常的大记录带来的OOM。orm

以前的管理方式,最明显的就是对execution和storage空间进行了明显的划分。举个例子,一些任务可能对数据缓存的需求并非很高,就会形成storage空间的浪费。blog

 
spark.executor.memory
spark.storage.memoryFraction spark.shuffle.memoryFraction
原来 36G 默认值0.6 默认值0.2
修改后 48G 0.4 0.5

修改后的spark ui 截图,处理时间从22分钟降到4.3分钟排序

image

image

相关文章
相关标签/搜索