spark优化总结
spark优化:
一、代码优化:
1.避免创建重复的RDD
2.对多次使用的rdd进行缓存 缓存级别一般使用MEMORY_AND_DISK_SER
3.使用高性能的算子(reducebykey,foreachpatition[一般用于和外部数据库进行连接时],coalelce【合并小文件】)
4.避免使用shuffle类的算子
5.广播大变量 map join
6.优化数据结构1.尽量使用字符串代替自定义的类2,尽量使用基本数据类型代替字符串3.尽量使用数组代替集合
7,使用kryo优化序列化性能
8.使用fastutil库
二、参数优化
1.-num-executors 直接决定任务可以执行多块【1.一般指定50-100比较合适2,num -exector*exector-cores不能超过yarn总的cpu,总的内存,一般最多不超过一半】、
2.-executor-cores【一般2-4个保证每一个cpu的内存分到的内存不低于2g】
3.-executor-memmory 【一般指定4g到8g】、
4.driver-memory 【driver内,用于储存广播变量】
5.-conf spark.defult.paralielism=100 rdd shuffle之后reduce数量
6.-conf spark.sql.shuffle.partitions=100【spark sql 之后的reduce数量,默认是200】
7-conf spark.storage。memoryFraction=0.4 持久化可以用的内存
8.-conf spark.shuffle.memoryFraction=0.4 shufffle阶段可以使用的内存
9.-conf spark.shujia.locality.wait=10 task在excutor中执行等待的时间
10.-conf spark.network.timeout=600s spark网络连接的超时时间
三、数据倾斜优化、
1.产生的原因:key分布不均 产生shuffle
2、使用 hive etl 进行预处理 mr比spark稳定
3,过滤少量导致倾斜的key key不能够影响业务
4,提高shuffle并行度
4,双重聚合:1.加前缀进行第一次聚合,去掉前缀进行第二次聚合
5.map join 只适合大表和小表关联
6,采样倾斜的key 并拆分join 使用大表和表的join