以下是Spark在Linux上的性能调优关键策略,涵盖资源、配置、代码及工具层面:
--num-executors:根据集群资源设置(建议50~100),避免过多导致资源碎片。--executor-memory:分配6~10GB内存,大任务可提高至16GB,需预留部分堆外内存(spark.executor.memoryOverhead,建议为内存的10%~20%)。--executor-cores:设置为2~4核,提升并行度,避免单核负载过高。spark.dynamicAllocation.enabled=true,按需伸缩Executor数量,减少空转资源浪费。spark.default.parallelism:设为Executor总CPU核数的2~3倍(如Executor有100核,可设200~300),平衡任务分配。spark.sql.shuffle.partitions:默认200,数据量大时可调至800~1500,避免Shuffle数据倾斜。spark.sql.files.maxPartitionBytes控制分区大小(如128MB),减少小文件读取开销。key+随机数),分散到不同分区,再通过reduceByKey聚合。broadcast(df)将小表广播到所有节点,避免Shuffle(需设置spark.sql.autoBroadcastJoinThreshold,默认10MB,可调至50MB)。map端),再全局聚合,适用于倾斜的groupByKey场景。spark.sql.adaptive.enabled=true),自动优化Join策略和分区。spark.serializer=org.apache.spark.serializer.KryoSerializer,并注册自定义类,减少序列化开销。cache()或persist(StorageLevel.MEMORY_AND_DISK),避免重复计算。spark.shuffle.file.buffer:增大Map端缓冲区(默认32KB,可设64KB~128KB),减少磁盘I/O。spark.reducer.maxSizeInFlight:增大Reduce端拉取数据块大小(默认48MB,可设96MB~128MB),提升拉取效率。spark.sql.parquet.enableVectorizedReader=true)。http://<driver-node>:4040监控Stage执行时间、Shuffle数据量、Executor内存使用等,定位长尾任务或数据倾斜。spark.executor.memoryOverhead或优化缓存使用。参考来源:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。