大数据,机器学习,人工智能Spark大数据

4.Spark调优

2019-05-31  本文已影响0人  山间浓雾有路灯

在Spark中,每一个进程包含一个executor对象,一个executor包含一个线程池,每个线程执行一个tasks

内存划分

20% execution(执行内存)

join,groupby这类算子设计内存,shuffle数据都会缓存在这个内存区,如果内存满,把数据写到磁盘(spill)

60% storage

存储cache,presist,broadcast(广播,数据量不是特别大的时候,类似MapReduce里的-file分发)数据

20% 留给程序自己

版本相关

1.6.0之前

每个类的内存是相互隔离的,导致了executor的内存利用率不高,只能使用者自己调整参数来优化内存

1.6.0以上

execution和storage内存是可以相互借用的,减少了OOM(out of memory)的情况发生

参数调优

num-executors
executor-memory
executor-cores
driver-memory
spark.default.parallelism
spark.storage.memoryFraction
spark.shuffle.memoryFraction
spark的作业提交
./bin/spark-submit \
  --master yarn-cluster \
  --num-executors 100 \  #需要多少进程
  --executor-memory 6G \ #每个进程需要多大内存
  --executor-cores 4 \   #每个进程可以并发多少个task
  --driver-memory 1G \   #默认1G,本地上传的时候需要设置,以供上传的数据放入内存,方便使用
  --conf spark.default.parallelism=1000 \ #并发度
  --conf spark.storage.memoryFraction=0.5 \
  --conf spark.shuffle.memoryFraction=0.3 

开发调优原则

1.避免创建重复的RDD
2.尽可能复用同一个人RDD
3.对多次使用的RDD进行持久化处理
4.避免使用shuffle类算子
5.使用map-side预聚合的shuffle操作
上一篇下一篇

猜你喜欢

热点阅读