web-dev-qa-db-ja.com

Spark例外:行の書き込み中にタスクが失敗しました

テキストファイルを読んで、寄木細工のファイルに変換しています。 sparkコードを使用して実行しています。しかし、コードを実行しようとすると、次の例外が発生します。

org.Apache.spark.SparkException: Job aborted due to stage failure: Task 2 in stage 1.0 failed 4 times, most recent failure: Lost task 2.3 in stage 1.0 (TID 9, XXXX.XXX.XXX.local): org.Apache.spark.SparkException: Task failed while writing rows.
    at org.Apache.spark.sql.sources.InsertIntoHadoopFsRelation.org$Apache$spark$sql$sources$InsertIntoHadoopFsRelation$$writeRows$1(commands.scala:191)
    at org.Apache.spark.sql.sources.InsertIntoHadoopFsRelation$$anonfun$insert$1.apply(commands.scala:160)
    at org.Apache.spark.sql.sources.InsertIntoHadoopFsRelation$$anonfun$insert$1.apply(commands.scala:160)
    at org.Apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:63)
    at org.Apache.spark.scheduler.Task.run(Task.scala:70)
    at org.Apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
    at Java.lang.Thread.run(Thread.Java:745)
Caused by: Java.lang.ArithmeticException: / by zero
    at parquet.hadoop.InternalParquetRecordWriter.initStore(InternalParquetRecordWriter.Java:101)
    at parquet.hadoop.InternalParquetRecordWriter.<init>(InternalParquetRecordWriter.Java:94)
    at parquet.hadoop.ParquetRecordWriter.<init>(ParquetRecordWriter.Java:64)
    at parquet.hadoop.ParquetOutputFormat.getRecordWriter(ParquetOutputFormat.Java:282)
    at parquet.hadoop.ParquetOutputFormat.getRecordWriter(ParquetOutputFormat.Java:252)
    at org.Apache.spark.sql.parquet.ParquetOutputWriter.<init>(newParquet.scala:83)
    at org.Apache.spark.sql.parquet.ParquetRelation2$$anon$4.newInstance(newParquet.scala:229)
    at org.Apache.spark.sql.sources.DefaultWriterContainer.initWriters(commands.scala:470)
    at org.Apache.spark.sql.sources.BaseWriterContainer.executorSideSetup(commands.scala:360)
    at org.Apache.spark.sql.sources.InsertIntoHadoopFsRelation.org$Apache$spark$sql$sources$InsertIntoHadoopFsRelation$$writeRows$1(commands.scala:172)
    ... 8 more

私は次の方法でデータフレームを書き込もうとしています:

dataframe.write().parquet(Path)

どんな助けでも大歓迎です。

6

もう1つの考えられる理由は、s3リクエストレート制限に達していることです。ログをよく見ると、次のようなものが表示される場合があります

AmazonS3Exception: Please reduce your request rate.

Spark UIは言う

Task failed while writing rows

問題が発生する理由は疑わしいですが、非常に集中的なジョブを実行している場合は、考えられる理由です。だから私は答えの完全性のためだけに含めました。

3

推測を無効にするがこのエラーの発生を防ぐことがわかりました。理由はよくわかりません。寄木細工の列を書くとき、投機的タスクと非投機的タスクが矛盾しているようです。

sparkConf.set("spark.speculation","false")
1
leo9r

それでも関連性があるとしても、この問題で私が経験したことは、Hadoopを開始しなかったことです。その上でsparkを実行する場合は、hadoopを開始してもう一度確認する価値があるかもしれません。

0
Julien Nyambal

ここで、すべてのソースを手元に用意しておくと役立ちます。スタックトレースをIDEに貼り付けて、スタックトレースからコード行に移動し、その内容を確認できます。おそらく、いくつかのinit /です。構成の問題

0
Steve Loughran

私の場合、別のユーザーに属するhdfsディレクトリを上書きしようとすると、このエラーが発生しました。ディレクトリを削除して、プロセスに最初から書き込ませることで解決しました。したがって、hdfsのユーザー権限の方向については、さらに掘り下げることが適切だと思います。

0
Michal Ficek