记一次Spark两表join错误修复

博客讲述了在Spark中遇到的两表join效率降低并引发错误的问题。通过尝试,作者发现两种有效解决方案:一是使用Spark的hint特性广播小表;二是对大表进行repartition。这两种方法都能解决错误,且在特定场景下,性能表现接近。
摘要由CSDN通过智能技术生成

业务情景

  • 两表根据一个key进行连接,一张表从hive中读取,数据量4千万,一张表从mongo中读取,数据量87万。起初,把小表直接进行广播变量,然后在大表的map算子里面根据key一条一条连接,这样速度很快。
  • 后来小表数据源改变了,数据量上升到1千万,此时再用之前的方式去跑spark任务,效率低了很多。然后我把两个数据源的表都注册成临时表,写sparksql作连接,想看看这样和我之前的写法时间上差多少,结果,数据能成功跑完,但是spark任务在结束之后,报了错误:
19/08/22 15:40:22 ERROR client.TransportResponseHandler: Still have 1 requests outstanding when connection from /192.168.2.12:56274 is closed
19/08/22 15:40:22 ERROR client.TransportClient: Failed to send RPC 4801162101817174823 to /192.168.2.14:43434: java.nio.channels.ClosedChannelException
java.nio.channels.ClosedChannelException
	at io.netty.channel.AbstractChannel$AbstractUnsafe.write(...)(Unknown Source)
19/08/22 15:40:22 INFO storage.BlockManagerInfo: Removed broadcast_8_piece0 on s2:39066 in memory (size: 809.3 KB, free: 5.2 GB)
19/08/22 15:40:22 WARN storage.BlockMan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值