複数のデータポイントセットを処理するSparkアプリケーションを実行しています。これらのセットのいくつかは順次処理する必要があります。データポイントの小さなセット(約100)に対してアプリケーションを実行すると、すべて正常に動作します。しかし、いくつかのケースでは、セットはcaのサイズを持つでしょう。万個のデータポイント、およびそれらの労働者は、次のスタックトレースでクラッシュする原因:スパークワーカーがスローFileNotFoundException一時シャッフルファイルの場合
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 26.0 failed 4 times, most recent failure: Lost task 0.3 in stage 26.0 (TID 36, 10.40.98.10, executor 1): java.io.FileNotFoundException: /tmp/spark-5198d746-6501-4c4d-bb1c-82479d5fd48f/executor-a1d76cc1-a3eb-4147-b73b-29742cfd652d/blockmgr-d2c5371b-1860-4d8b-89ce-0b60a79fa394/3a/temp_shuffle_94d136c9-4dc4-439e-90bc-58b18742011c (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at org.apache.spark.storage.DiskBlockObjectWriter.initialize(DiskBlockObjectWriter.scala:102)
at org.apache.spark.storage.DiskBlockObjectWriter.open(DiskBlockObjectWriter.scala:115)
at org.apache.spark.storage.DiskBlockObjectWriter.write(DiskBlockObjectWriter.scala:235)
at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:151)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:96)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:53)
at org.apache.spark.scheduler.Task.run(Task.scala:108)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:335)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
私は、このエラーの複数のインスタンスの後にすべてのログファイルをチェックしているが、任意の他のエラーメッセージを見つけられませんでした。スパーク・プロセスを実行しているユーザーが/tmp/
に読み取り/書き込み権限がありません
- :この問題のためにインターネットを検索は
、私は私の状況に適用できるように思わない2つの潜在的な原因を発見しましたディレクトリ。
- このエラーは大きなデータセット(常にではなく)でのみ発生すると見られますが、これは問題ではありません。
/tmp/
ディレクトリにシャッフルファイル(または他の一時的なSparkファイル)のための十分なスペースがありません。- 私のシステムの
/tmp/
ディレクトリには約45GBの空き容量があり、1つのデータポイント(< 1KB)のデータ量はこれもそうでない可能性があります。
- 私のシステムの
私は回避策と考えられる原因を見つけようと、時間のカップルのために、この問題で暴れるされています。
- は、私は、これはシャッフルの必要性を排除するため、このエラーを回避することを期待して、ドライバと同じマシン上で実行して、単一のワーカーに(通常は二つのマシンである)クラスタを削減しようとしています。これはうまくいかなかった。エラーはまったく同じ方法で発生します。
- 私は、テール再帰的メソッドを介してデータセットを順次処理する操作に問題を切り分けました。
この問題の原因は何ですか?原因を自分で判断するにはどうすればいいですか?