再多学一点吧

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

Spark优化

代码优化

1.避免使用重复的RDD
2.对经常使用的RDD进行缓存持久化
3.使用高性能的算子
reduceByKey(map端预聚合)替代groupByKey
mapPartitions替代map Transformation
foreachPartitions替代foreach Action
4.广播大变量(Mapjoin):在Driver端将小表进行广播
5.尽量避免shuffle类算子
6.使用Kryo优化序列化的性能
在算子内部使用外部变量
使用自定义数据结构,例如样例类
缓存的时候 MEMORY_AND_DISK_SER
7.优化数据结构:字符串代替类的对象,基本数据类型代替字符串,数组代替集合
8.使用高性能的库fastutil

参数优化

1.--num-executors 指定executor的数量,一般50-100
2.--executor-memory 指定每个executor的内存,一般给4-8g
3.--executor-cores 指定每个executor的核数,一般为2-4c,表示某一时刻有几个Task同时执行,尽量保证每个Task得到内存在2g
4.spark.storage.memoryFraction 0.6 用于缓存的内存比例
5.spark.shuffle.memoryFraction 0.2 用于shuffle的内存比例
6.spark.yarn.executor.memoryOverhead 用于指定堆外内存占比,默认占executor内存的0.1
7.spark.locality.wait 本地化策略等待时间,默认等待3s重试5次
8.spark.default.parallelism RDDshuffle后默认的并行度
9.spark.sql.shuffle.partitions SparkSQL中shuffle后的并行度,默认200
10.spark.network.timeout 默认超时时间 120s

数据倾斜

1.使用Hive ETL预处理数据 因为MR更加稳定,但是指标不治本,只是转移了数据倾斜
2.过滤少数导致数据倾斜的key 在key不影响业务的情况下过滤
3.提高shuffle操作的并行度 在某些情况下将数据分散到不同的Reduce中
4.双重聚合
加上随机前缀将数据打散,进行第一次聚合
去掉随机前缀,进行第二次聚合
异步求和
5.将reduce join转为map join 适用于大表关联小表,将小表广播
6.采样倾斜key并分拆join操作 适用于大表关联大表,只有一张大表中的数据有少量的key发生了数据倾斜
7.使用随机前缀和扩容RDD进行join 对资源要求很高,不常用

posted on   糟糟张  阅读(70)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示