Spark_Spark_ERROR关于spark.sql.autoBroadcastJoinThreshold设置

SparkSQL 相关文档 :

  http://spark.apache.org/docs/2.4.4/sql-performance-tuning.html

 

  今天使用spark对一组大数据进行合并作join操作,一直都报下面的错:

Exception in thread “broadcast-exchange-0” java.lang.OutOfMemoryError: Not enough memory to build and broadcast the table to all worker nodes

   想来想去,之前也跑过这类的任务,并且都没有类似的情况,从问题来分析说是内存溢出了,也就是说明广播内存不够用。但我不断设整任务的内存资源,无论是executor还是driver的内存都分配多一倍了,但是还是不起作用。于是回来看看自己配置的优化参数:

spark.config=

 spark.reducer.maxSizeInFlight:64m,

 spark.shuffle.file.buffer:128k,

 spark.shuffle.io.maxRetries:10,

 spark.shuffle.io.numConnectionsPerPeer:10,

 spark.shuffle.io.retryWait:30s,

 spark.rdd.compress:true,

 spark.io.compression.codec:org.apache.spark.io.SnappyCompressionCodec,

 spark.io.compression.snappy.blockSize:18k,

 spark.serializer:org.apache.spark.serializer.KryoSerializer,

 spark.sql.shuffle.partitions:300,

 spark.default.parallelism:50,

 spark.rpc.numRetries:3,

 spark.rpc.retry.wait:4s,

 spark.locality.wait.process:10,

 spark.locality.wait.node:5,

 spark.locality.wait.rack:3,

 spark.speculation:true,

 spark.speculation.multiplier:20,

 spark.shuffle.consolidateFiles:true,

 spark.sql.autoBroadcastJoinThreshold:209715200

   一个个分析,发现spark.sql.autoBroadcastJoinThreshold是刚增加上的参数,在另一个项目中作一些广播限制的操作,再去官网看下此配置的作用:


  意思说这个配置的最大字节大小是用于当执行连接时,该表将广播到所有工作节点。通过将此值设置为-1,广播可以被禁用

  于是将此配置设整下,结果任务正常跑完。此处记录下,以示记忆。

 

注意 : 广播被禁用会走 BroadCastHashJoin  !!!

参考文章

 https://blog.csdn.net/u010003835/article/details/106609023

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值