Spark调优方式

浩客2年前技术文章626

(1)资源参数调优

  • num-executors:设置Spark作业总共要用多少个Executor进程来执行

  • executor-memory:设置每个Executor进程的内存

  • executor-cores:设置每个Executor进程的CPU core数量

  • driver-memory:设置Driver进程的内存

  • spark.default.parallelism:设置每个stage的默认task数量


(2)开发调优

  1. 避免创建重复的RDD

  2. 尽可能复用同一个RDD

  3. 对多次使用的RDD进行持久化

  4. 尽量避免使用shuffle类算子

  5. 使用map-side预聚合的shuffle操作

  6. 使用高性能的算子

        ①使用reduceByKey/aggregateByKey替代groupByKey

        ②使用mapPartitions替代普通map

        ③使用foreachPartitions替代foreach

        ④使用filter之后进行coalesce操作

        ⑤使用repartitionAndSortWithinPartitions替代repartition与sort类操作

  

(3)广播大变量

在算子函数中使用到外部变量时,默认情况下,Spark会将该变量复制多个副本,通过网络传输到task中,此时每个task都有一个变量副本。如果变量本身比较大的话(比如100M,甚至1G),那么大量的变量副本在网络中传输的性能开销,以及在各个节点的Executor中占用过多内存导致的频繁GC(垃圾回收),都会极大地影响性能。

(4)使用Kryo优化序列化性能


(5)优化数据结构

在可能以及合适的情况下,使用占用内存较少的数据结构,但是前提是要保证代码的可维护性。

相关文章

使用clickhouse-copier迁移数据

说明clickhouse-copier是clickhouse官方提供的一个数据迁移工具。支持将clickhouse表从一个集群迁移到另外一个集群。使用clickhouse-copier有一些限制条件:...

trino组件对接hudi(四)

trino组件对接hudi(四)

安装部署本文是基于已经部署了trino组件的环境上,进行的trino和hudi的对接,使trino组件能够正常查询hudi表。1、增加hudi connector配置在trino安装部署下的etc/c...

xargs-管道命令符

有时候我们的脚本却需要 echo '516' | kill 这样的效果,例如 ps -ef | grep 'ddd' | kill 这样的效果,筛选出符合某条件的进程pid然后结束。这种需求对于我们来...

oracle跟踪会话级别的10046事件

1.开启10046跟踪事件alter session set events '10046 trace name context forever, level 12';2.执行要跟踪的sql语句sele...

Flink sql 集成hive metastore-测试

Flink sql 集成hive metastore-测试

FQA1、如何不使用catalog命令,默认进入hive catalog在sql-client-defaults.yaml中添加以下配置2、如何使用mysql使用./bin/sql-client.sh...

MySQL性能优化(七)优化or查询的另一个例子

MySQL性能优化(七)优化or查询的另一个例子

优化or查询的另外一个例子。一个例子SELECT msg.msg_id, msg.content , … FROM msg   ...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。