zoukankan      html  css  js  c++  java
  • 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调优

    渐变 --> 突变
  • 相关阅读:
    jmeter察看结果树中文乱码解决办法
    使用postman测试接口
    使用Jenkins持续集成
    Python单元测试unittest测试框架
    使用类封装一个签名规则
    Python处理URL编码
    Python中的 if __name__ == '__main__' 是什么意思?
    python发送邮件
    instruction 寻址,sib modrm
    .sv 与.svh之间的区别
  • 原文地址:https://www.cnblogs.com/lybpy/p/9813736.html
Copyright © 2011-2022 走看看