Spark参数优化

Spark参数优化

  1. spark conf 中加入一些参数,会加速shuffle过程,这里根据数据量实际大小可以调节下面一些参数,实践中会对于大数据量JOIN能加速20%以上
    spark.default.parallelism 是控制每个stage的默认stage数量,一般是对RDD有效,而参数spark.sql.shuffle.partitions是控制spark sql的shuffle分区数量
spark.default.parallelism=1000
spark.sql.shuffle.partitions=1000
  1. shuffle数据量大或者硬盘空间不足,造成节点异常,可以①增加shuffle等待时间②划分更多的partitions③增加executor的内存
    但是由shuffle导致的异常的根本解决办法还是想办法减少shuffle的数据量
spark.rpc.askTimeout=30000
  1. 数据倾斜是同一个stage中极少数task处理的数据量远远比其他task要大或者慢,网上各种解决方法很多,就不啰嗦了。有一个参数对于少数task运行时间长比较有效,就是开启推测执行,如果一个task比较慢,会开启几个相同的task任务去执行,减少task因为网络传输等各种原因失败的情况,加快执行,防止因为一个task卡住导致运行极慢。
spark.speculation=true

适当调整推测执行的参数,可以使任务跑的更快

spark.speculation.interval=500
spark.speculation.quantile=0.85
spark.speculation.multiplie=1.6
  1. 数据量特别大(比方说超过100G)的时候,
    ① 不要使用persist和unperisist函数,容易失败,可能spark对于超大数据的persist不太支持,而且大量数据persist存在磁盘IO,本身比较耗时
    ② 尽量不要使用count函数
    ③ 大数据尽快落地
  2. 如果读取的数据源有很多小文件,读取会产生大量的task来处理,可以设置参数使得每个task处理的数据量变大,这样能减少task数量.spark.sql.files.openCostInBytes默认是4M,表示小于4M的会合并成一个文件,减少读取的task。
spark.sql.files.openCostInBytes=33554432   // 32M,默认是4M,用于小文件合并
spark.sql.files.maxPartitionBytes=268435456  // 256M,默认是64M,每个分区最大的文件大小,针对于大文件切分
  1. 集群如果不稳定,经常有机器挂掉,需要设置黑名单机制,某台机器上面的任务失败数量超过一定值后,调度器就会记住这台机器,后面的task就不会再往这个机器上面下发
spark.blacklist.enabled=true
  1. 如果driver有一些像collect这样的action操作,而拉取到driver上面的数据量又比较大,需要调整driver的maxResultSize值,不然任务会失败
spark.driver.maxResultSize=10g
  1. Spark任务有时候会失败自动重试,如果希望失败了不重试,可以制定尝试的次数
spark.yarn.maxAppAttempts=1
  1. 小文件太多,处理的时候也可以使用制定文件分块大小的方式来减少读取的task数量
spark.hadoop.mapreduce.input.fileinputformat.split.minsize=10240000
spark.hadoop.mapreduce.input.combinefileinputformat.split.minsize=10240000
spark.mapreduce.input.fileinputformat.split.maxsize=51200000
spark.mapreduce.input.fileinputformat.split.minsize=51200000
  1. 当程序jar包里面的依赖和集群里面相同依赖的版本不同时,会出现版本不兼容的情况,需要指定使用程序里面的jar包
spark.driver.userClassPathFirst=false
spark.executor.userClassPathFirst=false
spark.driver.extraClassPath=__app__.jar
spark.executor.extraClassPath=__app__.jar
  1. 程序如果对于资源稳定性要求较高,可以指定不进行动态分配
spark.dynamicAllocation.enabled=false
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark SQL是Spark中的一个模块,用于处理结构化数据,通过执行SQL查询从而实现数据处理和分析任务。在使用Spark SQL时,可以通过调整核心参数优化性能。 1. spark.sql.shuffle.partitions:这个参数指定了进行shuffle操作时的分区数。合理地设置这个参数可以提高整体性能。一般来说,当数据量较小时,设置为几倍于CPU核心数的值,当数据量较大时,可以根据具体情况进行调优。 2. spark.sql.autoBroadcastJoinThreshold:这个参数指定了进行Broadcast Join的阈值。Broadcast Join是指将小表广播到所有的Executor上,与大表进行Join操作,从而减少Shuffle的数据量。合理设置这个参数可以提高Join操作的性能。一般来说,当小表的大小小于等于10MB时,可以将这个参数设置为合适的值。 3. spark.sql.broadcastTimeout:这个参数指定了广播变量的超时时间。当Broadcast Join的阈值设置为正常值时,如果广播变量在超时时间内没有广播到Executor上,那么就会将Broadcast Join更改为Shuffle Join。根据网络情况和数据量大小合理设置这个参数可以提高性能。 除了上述参数,还可以通过设置一些其他的Spark SQL核心参数优化性能,例如: - spark.sql.shuffle.compress:设置是否压缩shuffle的数据,默认为true,可以节省网络传输的数据量。 - spark.sql.inMemoryColumnarStorage.batchSize:设置内存列式存储的批处理大小,默认为10000,适当调整可以提高性能。 - spark.sql.adaptive.enabled:启用自适应执行优化,默认为false,可以根据实际情况开启。 综上所述,通过调整Spark SQL的核心参数可以提高性能,但是需要根据具体情况进行调优,找到最合适的参数值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值