Spark性能优化—基础

Spark性能优化:开发调优、资源调优、数据倾斜调优、shuffle调优


开发调优

  • 避免重复创建RDD
  • 复用同一个RDD
  • 对多次使用的RDD进行持久化
  • 尽量避免使用shuffle类算子——broadcast+map代替join
  • 使用map-side预聚合的shuffle操作——reduceByKey代替groupByKey
  • 高性能算子
  • 广播大变量
  • Kyro优化序列化性能
  • 优化数据结构——Spark官方建议尽量使用字符串代替对象,原始类型代替字符串,数组代替集合类型,减少内存占用

资源调优

  • num-executors——设置Spark作业总共有多少个Executor进程
  • executor-memory——每个Executor进程内存的大小
  • executor-cores——每个Executor进程的CPU core数量——决定每个Executor进程并行执行task的能力
  • driver-memory
  • spark.storage.memoryFraction——设置RDD持久化数据在Executor内存中所占比例(默认0.6)——根据shuffle类操作,持久化操作,gc性能动态调整
  • spark.shuffle.memoryFraction——shuffle过程当前task拉取到上一个stage的task的输出,进行聚合操作时能够使用的Executor内存的比例(默认0.2)——shuffle时数据多,内存不够,溢出到磁盘
  • spark.default.parallelism——设置每个stage默认task数量——若不设置,task数量由HDFS的block数量决定

猜你喜欢

转载自blog.csdn.net/quitozang/article/details/80897386