【原创】大叔经验分享(20)spark job之间会停顿几分钟

今天遇到一个问题,spark应用中在一个循环里执行sql,每个sql都会向一张表写入数据,比如

insert overwrite table test_table partition(dt) select * from test_table_another;

除了执行sql没有其他逻辑,每个sql都会对应1个job,在spark web ui上看到job和job之间会停顿几分钟,并且非常有规律,任何两个job之间都会停顿,是不是很神奇?

 

答案揭晓:

spark在执行insert overwrite table partition的时候,分为两个部分,一个是执行select(读数据),一个是执行load partition(写数据),具体详见执行计划;

每个sql对应1个job,这个job执行的select部分(读数据),不包含load partition部分(写数据),因为spark为了兼容hive,直接使用hive的元数据库,所有ddl操作都是通过反射直接调用hive的代码(spark2.1依赖的是hive1.2),这个过程并不包含在spark job中,所以看起来job执行完之后停顿了几分钟才执行下个job,这里停顿的几分钟其实是在做load partition操作(写数据);

 

这里还有另外一个问题,hive1.2在loadPartition删除文件时是串行操作,非常慢,这个问题在hive2时改为线程池解决,具体代码及问题解析详见:https://www.cnblogs.com/barneywill/p/10154922.html

 

转载于:https://www.cnblogs.com/barneywill/p/10187827.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值