问题
如果您的应用程序包含任何聚合或加入阶段,执行需要一个火花洗牌阶段。取决于所使用的特定的配置,如果你是一个交互式的集群上运行多个流查询你可能得到一个洗牌FetchFailedException错误。
ShuffleMapStage未能最大允许的次数DAGScheduler: ShuffleMapStage 499453(从command-39573728:13)失败由于org.apache.spark.shuffle 468.820秒。MetadataFetchFailedException:缺少一个输出位置228703 org.apache.spark.shuffle洗牌。FetchFailedException: Connection reset by peer at org.apache.spark.storage.ShuffleBlockFetcherIterator.throwFetchFailedException(ShuffleBlockFetcherIterator.scala:747) Caused by: java.io.IOException: Connection reset by peer
导致
洗牌获取失败通常发生在场景如集群降尺度事件,遗嘱执行人损失,或工人解除。在某些情况下,从遗嘱执行人洗牌文件丢失。当一个后续任务试图获取洗牌文件,它失败了。
砖的洗牌服务是默认启用。这项服务允许外部转移服务,保留了洗牌文件写的执行人执行人可以安全地删除。
运行spark.conf.get (“spark.shuffle.service.enabled”)在Python或Scala笔记本电池返回洗牌服务的当前值。如果它返回真正的启用该服务。
spark.conf.get (“spark.shuffle.service.enabled”)
解决方案
禁用默认的火花洗牌服务。
禁用服务并不妨碍洗牌,洗牌只是更改执行的方法。当服务被禁用,洗牌是由执行人执行的。
你可以通过添加禁用洗牌服务spark.shuffle.service。启用了错误集群的火花配置(AWS|Azure|GCP)。
spark.shuffle.service。启用了错误
更新后重新启动集群火花配置。