繁体   English   中英

Spark异常:写入行时任务失败

[英]Spark Exception : Task failed while writing rows

我正在阅读文本文件并将其转换为镶木地板文件。 我正在使用火花代码。 但是,当我尝试运行代码时,我得到以下异常

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

我试图以下列方式编写数据帧:

dataframe.write().parquet(Path)

任何帮助都非常感谢。

另一个可能的原因是你达到了s3请求率限制。 如果仔细查看日志,可能会看到类似这样的内容

AmazonS3Exception: Please reduce your request rate.

虽然Spark UI会说

Task failed while writing rows

我怀疑你遇到问题的原因,但如果你正在经营一项高度密集的工作,这可能是一个原因。 所以我只是为了答案的完整性。

我发现禁用推测会阻止此错误发生。 我不太清楚为什么。 在编写镶木地板行时,似乎投机性和非推测性任务是相互矛盾的。

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

这就是拥有所有源代码帮助的地方:将堆栈跟踪粘贴到IDE中,该IDE可以从堆栈跟踪转换为代码行,并查看它的内容。 这可能只是一些init / config问题

如果它仍然是相关的,我对这个问题的经验是我没有开始hadoop。 如果你在它上面运行spark,可能值得启动hadoop并再次检查。

在我的情况下,当我试图覆盖属于不同用户的hdfs目录时,我看到了这个错误。 删除目录让我的进程从头开始编写它解决了它。 所以我想,在hdfs的用户权限方向上,更多的挖掘是合适的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM