web-dev-qa-db-fra.com

Exception d'étincelle: la tâche a échoué lors de l'écriture des lignes

Je lis des fichiers texte et les convertis en fichiers de parquet. Je le fais en utilisant le code d'étincelle. Mais quand j'essaye de lancer le code, je reçois l'exception suivante

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, ukfhpdbivp12.uk.experian.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

J'essaie d'écrire le cadre de données de la manière suivante:

dataframe.write().parquet(Path)

Toute aide est grandement appréciée.

6
Aditya Calangutkar

Une autre raison possible est que vous atteignez les limites de taux de requêtes s3. Si vous regardez de près vos journaux, vous verrez peut-être quelque chose comme ceci.

AmazonS3Exception: Please reduce your request rate.

Alors que l'interface utilisateur Spark dira

Task failed while writing rows

Je doute que ce soit la raison pour laquelle vous rencontrez un problème, mais c'est une raison possible si vous travaillez très intensément. J'ai donc inclus juste pour la complétude de la réponse.

2
Carlos Bribiescas

J'ai trouvé que désactivant la spéculation empêche cette erreur de se produire. Je ne sais pas trop pourquoi. Il semble que les tâches spéculatives et non spéculatives soient en conflit lors de l'écriture de lignes de parquet.

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

Si cela est toujours d'actualité, mon expérience avec cette question est que je n'ai pas commencé hadoop. Si vous lancez spark sur le dessus, il peut être intéressant de commencer hadoop et de vérifier à nouveau.

0
Julien Nyambal

C'est là qu'avoir toutes les sources à portée de main est utile: collez la trace de pile dans un IDE pouvant aller d'une trace de pile à des lignes de code et voyez ce qui est écrit. C'est probablement juste un problème init/config

0
Steve Loughran

Dans mon cas, j'ai vu cette erreur lorsque j'ai essayé de remplacer le répertoire hdfs qui appartenait à un autre utilisateur. Supprimer le répertoire a laisser mon processus l'écrire à partir de zéro l'a résolu. Donc, je suppose que plus de fouilles est approprié en ce qui concerne les autorisations des utilisateurs sur les fichiers hdfs.

0
Michal Ficek