spark异常:任务在写入行时失败

zvms9eto  于 2021-06-02  发布在  Hadoop
关注(0)|答案(5)|浏览(540)

我正在阅读文本文件,并将其转换为Parquet文件。我用的是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:

dataframe.write().parquet(Path)

非常感谢您的帮助。

vjrehmav

vjrehmav1#

这就是手头有所有源代码的地方:将堆栈跟踪粘贴到ide中,ide可以从堆栈跟踪到代码行,并查看它所说的内容。可能只是初始化/配置问题

z4iuyo4d

z4iuyo4d2#

另一个可能的原因是您达到了s3请求速率限制。如果你仔细看你的日志,你可能会看到这样的东西 AmazonS3Exception: Please reduce your request rate. 而spark用户界面会说 Task failed while writing rows 我怀疑这是你遇到问题的原因,但如果你在执行一项高度密集的工作,这可能是一个原因。所以我把它包括进来只是为了让答案完整。

f2uvfpb9

f2uvfpb93#

我发现禁用推测可以防止这种错误的发生。我不太清楚为什么。在编写Parquet地板行时,推测性任务和非推测性任务似乎是相互冲突的。

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

ipakzgxi4#

在我的例子中,当我试图覆盖属于其他用户的hdfs目录时,我看到了这个错误。删除一个目录,让我的进程从头开始写,解决了这个问题。所以我想,在hdfs的用户权限方向上进行更多的挖掘是合适的。

klh5stk1

klh5stk15#

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

相关问题