1. ホーム
  2. apache-spark

[解決済み] Sparkクラスタがハートビートのタイムアウトでいっぱいになり、エグゼキュータが勝手に終了してしまう。

2022-02-24 11:28:11

質問

私のApache Sparkクラスタは、多くのエグゼキュータタイムアウトを与えるアプリケーションを実行しています。

10:23:30,761 ERROR ~ Lost executor 5 on slave2.cluster: Executor heartbeat timed out after 177005 ms
10:23:30,806 ERROR ~ Lost executor 1 on slave4.cluster: Executor heartbeat timed out after 176991 ms
10:23:30,812 ERROR ~ Lost executor 4 on slave6.cluster: Executor heartbeat timed out after 176981 ms
10:23:30,816 ERROR ~ Lost executor 6 on slave3.cluster: Executor heartbeat timed out after 176984 ms
10:23:30,820 ERROR ~ Lost executor 0 on slave5.cluster: Executor heartbeat timed out after 177004 ms
10:23:30,835 ERROR ~ Lost executor 3 on slave7.cluster: Executor heartbeat timed out after 176982 ms

しかし、私の設定では、実行者のハートビート間隔を増やすことに成功したことが確認できます。

とマークされたエグゼキュータのログを閲覧したところ EXITED (つまり、ドライバがハートビートを取得できなかったときにそれらを削除した) エグゼキュータは、ドライバからタスクを受け取らなかったので自殺したように見えます。

16/05/16 10:11:26 ERROR TransportChannelHandler: Connection to /10.0.0.4:35328 has been quiet for 120000 ms while there are outstanding requests. Assuming connection is dead; please adjust spark.network.timeout if this is wrong.
16/05/16 10:11:26 ERROR CoarseGrainedExecutorBackend: Cannot register with driver: spark://[email protected]:35328

ハートビートをオフにしたり、エグゼキュータがタイムアウトしないようにするにはどうしたらいいですか?

解決方法は?

答えはいたってシンプルだった。私の spark-defaults.conf を設定しました。 spark.network.timeout を高い値に設定しました。ハートビート間隔は問題とはやや無関係でした(チューニングは便利ですが)。

を使用する場合 spark-submit また、以下のようにタイムアウトを設定することができました。

$SPARK_HOME/bin/spark-submit --conf spark.network.timeout 10000000 --class myclass.neuralnet.TrainNetSpark --master spark://master.cluster:7077 --driver-memory 30G --executor-memory 14G --num-executors 7 --executor-cores 8 --conf spark.driver.maxResultSize=4g --conf spark.executor.heartbeatInterval=10000000 path/to/my.jar