• spark调优


      开发调优和资源调优是所有spark作业都要注意和遵循的基本原则,是高性能spark作业的基础;数据倾斜调优,主要解决spark作业数据倾斜的;shuffle调优,对spark作业的shuffle运行过程以及细节进行调优

    1、开发调优

      1、对于同一份数据如hive表,hdfs文件,只应该创建一个RDD,不能创建对个RDD代表同一份数据,在开发过程应该避免重复创建,否 则重复计算,增作业性能开销

      2、尽可能复用同一个RDD,对于多个RDD的数据有重叠或包含的情况,应尽量复用一个RDD,减少RDD数量,减少算子执行的次数

      3、对多次使用的RDD进行持久化:第一步优化,尽可能复用RDD,第二步优化,对一个RDD执行多次算子操作时,这个RDD本身仅被计算一次。spark中每次对一个RDD执行一个算子操作时,都会从源头计算一遍,性能很差。因此,对该RDD进行持久化,将RDD数据保存到内存或磁盘。cache()方法:使用非序列化方式将RDD数据全部尝试持久化到内存,persist()手动选择持久化级别

      4、尽量避免使用shuffle类算子,spark作业运行过程中,最消耗性能的地方是shuffle过程,大量磁盘io和数据网络传输操作导致性能较差

      5、使用map-side预聚合的shuffle操作

      6、使用高性能算子:reduceByKey和aggregateByKey替代groupByKey;使用mapPartiton替代map;使用foreachPartition替换foreach;使用filter之后进行coalesce;使用reparationAndSortWithinPartitions替代reparation后+sort

      7、广播大变量:如100m以上的大集合

      8、使用kryo优化序列化性能

      9、优化数据结构:java中三类类型好内存,对象、字符串、集合类型,因此尽量用字符串替换对象,原始类型替换字符串,数组替换集合类型,尽可能减少内存占用,降低GC频率

    2、资源调优

      spark资源参数可在spark-submit中设置

      1、num-executors:执行器个数,每个spark作业运行一般设置50-100个执行器进程

      2、executor-memory:每个执行器内存,4-8G

      3、executor-cores:每个执行器核数,每个执行器并行执行task的能力 2-4

      4、driver-memory:driver进程内存,1G,如果有collect算子将RDD数据全拉取到Driver处理,需要加大driver内存

      5、spark.default.parallelism:设置每个stage默认的task数量 500-1000

      6、spark.storage.meoryFraction:Rdd持久化数据在执行器内存中能占的比例,默认0.6

      7、spark.shuffle.memoryFraction:shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能使用执行器内存的比例,默认0.2

    3、数据倾斜调优

    4、shuffle调优

    渐变 --> 突变
  • 相关阅读:
    P4936 题解
    初赛
    洛谷P2763题解
    探秘最小生成树&&洛谷P2126题解
    洛谷P2630 题解
    洛谷P2125 题解
    洛谷P1510 题解
    洛谷P3572题解
    Codeforces 448C Painting Fence(分治法)
    Codeforces 999F Cards and Joy(二维DP)
  • 原文地址:https://www.cnblogs.com/lybpy/p/9813736.html
Copyright © 2020-2023  润新知