概念
Spark 推测执行是一种优化技术。
在Spark中,可以通过推测执行,即Speculative Execution,来识别并在其他节点的Executor上重启某些运行缓慢的Task,并行处理同样的数据,谁先完成就用谁的结果,并将另一个未完成的Task Kill掉,从而加快Task处理速度。适用于某些Spark任务中部分Task被hang住或运行缓慢,从而拖慢了整个任务运行速度的场景。
注意:
1. 不是所有运行缓慢的Spark任务,都可以用推测执行来解决。
2. 使用推测执行时应谨慎。需要合适的场景、合适的参数,参数不合理可能会导致大量推测执行Task占用资源。
3. 如Spark Streaming写Kafka缓慢,若启用推测执行,可能会导致数据重复。
4. 被推测的Task不会再次被推测。
Spark推测执行参数
- spark.speculation :默认false。是否开启推测执行。
- spark.speculation.interval :默认100ms。多久检查一次要推测执行的Task。
- spark.speculation.multiplier :默认1.5。一个Stage中,运行时间比成功完成的Task的运行时间的中位数还慢1.5倍的Task才可能会被推测执行。
- spark.speculation.quantile: 默认0.75。推测的分位数。即一个Stage中,至少要完成75%的Task才开始推测。
Speculation工作流程
版权声明:本文为JiShuiSanQianLi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。