zoukankan      html  css  js  c++  java
  • Spark参数调优

    Executor的内存分为3块 :

    • 第一块:让task执行代码时,默认占executor总内存的20%

    • 第二块:task通过shuffle过程拉取上一个stage的task的输出后,进行聚合等操作时使用 ,默认也是占20%

    • 第三块:让RDD持久化时使用,默认占executor总内存的60%

    Task的执行速度和每个executor进程的CPU Core数量有直接关系,一个CPU Core同一 时间只能执行一个线程,每个executor进程上分配到的多个task,都是以task一条线程的 方式,多线程并发运行的。如果CPU Core数量比较充足,而且分配到的task数量比较合 理,那么可以比较快速和高效地执行完这些task线程

    常用参数:

    • num - executors : 该作业总共需要多少executor进程执行 – 建议:每个作业运行一般设置50~100个左右较合适

    • executor - memory : 设置每个executor进程的内存, num-executors* numexecutors代表作业申请的总内存量(尽量不要超过最大总内存的1/3~1/2) – 建议:设置4G~8G较合适

    executor - cores : 每个executor进程的CPU Core数量,该参数决定每个 executor进程并行执行task线程的能力, num-executors* executor-cores代表 作业申请总CPU core数(不要超过总CPU Core的1/3~1/2 ) – 建议:设置2~4个较合适

    driver - memory : 设置Driver进程的内存

      – 建议:通常不用设置,一般1G就够了,若出现使用collect算子将RDD数据全部拉取到Driver上处理,就必须确 保该值足够大,否则OOM内存溢出

    spark.default.parallelism : 每个stage的默认task数量

      – 建议:设置500~1000较合适,默认一个HDFS的block对应一个task,Spark默认值偏少,这样导致不能充分利 用资源

    spark.storage.memoryFraction : 设置RDD持久化数据在executor内存中能占的比例, 默认0.6,即默认executor 60%的内存可以保存持久化RDD数据

      – 建议:若有较多的持久化操作,可以设置高些,超出内存的会频繁gc导致运行缓慢

    spark.shuffle.memoryFraction : 聚合操作占executor内存的比例,默认0.2

      – 建议:若持久化操作较少,但shuffle较多时,可以降低持久化内存占比,提高shuffle操作内存占比

     spark-submit命令示例:

    调优原则

  • 相关阅读:
    weblogic静默安装指导
    简单说一下 servlet的生命周期?
    简单讲一下 SpringMVC的执行流程?
    讲一下 Spring的事务传播特性
    Spring事务的隔离级别
    面试资料
    ArrayList 和 HashMap 的默认大小是多数?
    spring-mvc里的 <mvc:resources> 及静态资源访问
    说说Java中的资源文件的读取
    JVM-String常量池与运行时常量池
  • 原文地址:https://www.cnblogs.com/xumaomao/p/12671963.html
Copyright © 2011-2022 走看看