亲爱的阿帕奇火花爱好者
我最近启动了一个副业项目,目标是将几台ODROID XU4计算机变成一个独立的星火集群。
在设置集群之后,我遇到了一个似乎是针对异构多处理器的问题。当使用所有8个处理器时,火花执行器任务在XU4上运行得非常慢。原因,正如我在下面的评论中所提到的,是因为星火不会等待那些在慢速处理器上被启动的执行者。
http://forum.odroid.com/viewtopic.php?f=98&t=21369&sid=4276f7dc89a8d7825320e7f705011326&p=152415#p152415
一种解决方案是使用较少的执行器内核,并将CPU关联设置为不使用小处理器。然而,这不是一个理想的解决方案。
有没有办法让斯派克等得更久,等待较慢执行者的反馈?显然,等待太久会对业绩产生负面影响。然而,利用所有核心的积极作用应平衡负面影响。
提前感谢您的帮助!
发布于 2016-07-30 08:55:47
@Dikei的回应强调了两个潜在的原因,但事实证明问题并不是他所怀疑的。我有和@TJVR相同的设置,结果是司机失去了执行者的心跳。为了解决这个问题,我在spark-env.sh中添加了以下内容
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文件系统的性能。这些默认更改允许我将核心使用率提高到一个以上,并且不会经常丢失执行程序。
发布于 2016-07-25 13:02:48
火花不会杀死慢速的执行者,但会在两种情况下将执行者标记为死亡:
在我看来,可能是GC开销杀死了您慢下来的执行器,并且驱动程序不得不在不同的执行器上重新执行任务。如果是这样的话,您可以尝试将数据分割成更小的分区,以便每个执行器必须一次处理较少的数据。。
其次,在没有测试的情况下,不应该将spark.speculation设置为“true”。在默认情况下,它是“假”的,这是有原因的,我看到它在某些情况下弊大于利。
最后,以下假设可能不成立。
然而,利用所有核心的积极作用应平衡负面影响。
慢执行程序(散落)可能导致程序执行更糟糕,这取决于工作负载。完全有可能避免缓慢的核心将提供最好的结果。
https://stackoverflow.com/questions/38566283
复制相似问题