本文主要是介绍spark推测执行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一. 简介
再我们run spark job 的时候 有时候可能会遇到 很少一部分task 运行的时候出错了或者卡住了。又不想直接重新run 一下 这样太不方便了而且还需要手动参与。
spark 为了这样的情况提供了了一种机制叫推测执行这种机制默认是关闭的需要手动开启。
二. 配置
设置 spark.speculation=true即可
额外设置
1. spark.speculation.interval 100:检测周期,单位毫秒;
2. spark.speculation.quantile 0.75:当运行成功的task占总task的百分比启动推测;
3. spark.speculation.multiplier 1.5:比其他的慢多少倍时启动推测。
流程图如下:
三.问题
1.谨慎使用,严重的会造成所有资源被全部占用,不能及时释放
2.我们的spark任务会将计算结果写入kafka,再有logstash写入es。最近由于kafka集群写入慢,甚至写不进去,spark任务直接卡住,为防止卡住的情况发生,加了推测执行,但发现跑出来的数据存在重复的情况。同一条数据写了2次,排查发现是由于推测执行的问题,像这种讲执行结果写入kafka的场景,不适用推测执行,因为一个task虽然没有执行完,但是一部分结果已经输出了,启动多个task就会造成数据重复,所以具体的配置还是要看应用的场景来做权衡
欢迎关注,更多惊喜等着你
这篇关于spark推测执行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!