首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache -如何避免失败缓慢的任务

Apache -如何避免失败缓慢的任务
EN

Stack Overflow用户
提问于 2016-07-25 11:14:59
回答 2查看 1.7K关注 0票数 1

亲爱的阿帕奇火花爱好者

我最近启动了一个副业项目,目标是将几台ODROID XU4计算机变成一个独立的星火集群。

在设置集群之后,我遇到了一个似乎是针对异构多处理器的问题。当使用所有8个处理器时,火花执行器任务在XU4上运行得非常慢。原因,正如我在下面的评论中所提到的,是因为星火不会等待那些在慢速处理器上被启动的执行者。

http://forum.odroid.com/viewtopic.php?f=98&t=21369&sid=4276f7dc89a8d7825320e7f705011326&p=152415#p152415

一种解决方案是使用较少的执行器内核,并将CPU关联设置为不使用小处理器。然而,这不是一个理想的解决方案。

有没有办法让斯派克等得更久,等待较慢执行者的反馈?显然,等待太久会对业绩产生负面影响。然而,利用所有核心的积极作用应平衡负面影响。

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-30 08:55:47

@Dikei的回应强调了两个潜在的原因,但事实证明问题并不是他所怀疑的。我有和@TJVR相同的设置,结果是司机失去了执行者的心跳。为了解决这个问题,我在spark-env.sh中添加了以下内容

代码语言:javascript
复制
export SPARK_DAEMON_JAVA_OPTS="-Dspark.worker.timeout=600 -Dspark.akka.timeout=200 -Dspark.shuffle.consolidateFiles=true"
export SPARK_JAVA_OPTS="-Dspark.worker.timeout=600 -Dspark.akka.timeout=200 -Dspark.shuffle.consolidateFiles=true"

这将更改执行者心跳的默认超时。还将spark.shuffle.consolidateFiles设置为true,以提高ext4文件系统的性能。这些默认更改允许我将核心使用率提高到一个以上,并且不会经常丢失执行程序。

票数 3
EN

Stack Overflow用户

发布于 2016-07-25 13:02:48

火花不会杀死慢速的执行者,但会在两种情况下将执行者标记为死亡:

  1. 如果驱动程序在一段时间内没有接收到心跳信号(默认值:120 s):执行器必须定期发送心跳消息,通知驱动程序它仍在运行。网络问题或大的GC暂停可以防止这些心跳的发生。
  2. 执行器由于代码中的异常或JVM运行时错误而崩溃,很可能也是由于GC暂停造成的。

在我看来,可能是GC开销杀死了您慢下来的执行器,并且驱动程序不得不在不同的执行器上重新执行任务。如果是这样的话,您可以尝试将数据分割成更小的分区,以便每个执行器必须一次处理较少的数据。

其次,在没有测试的情况下,不应该将spark.speculation设置为“true”。在默认情况下,它是“假”的,这是有原因的,我看到它在某些情况下弊大于利。

最后,以下假设可能不成立。

然而,利用所有核心的积极作用应平衡负面影响。

慢执行程序(散落)可能导致程序执行更糟糕,这取决于工作负载。完全有可能避免缓慢的核心将提供最好的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38566283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档