Spark 中动态分区的 LeaseExpiredException

Posted

技术标签:

【中文标题】Spark 中动态分区的 LeaseExpiredException【英文标题】:LeaseExpiredException on Dynamic partitioning in Spark 【发布时间】:2017-10-16 14:27:10 【问题描述】:

我正在从事一项 spark 工作,我试图从非分区表中读取数据并创建一个分区表。我正在做的事情很简单:

df = sqlContext.read.parquet('/path/to/file')
df.write.partitionBy('partition_col').parquet('/new/path/to/file')

我收到以下错误:

伙计们,我正在从事一项 spark 工作,我正在尝试从非分区表中读取数据并创建一个分区表。我所做的很简单 -

df = sqlContext.read.parquet('/path/to/file')
df.write.partitionBy('partition_col').parquet('/new/path/to/file')

我收到以下错误 -

错误数据源.DynamicPartitionWriterContainer:任务尝试尝试_201710160717_0003_m_000111 _0 中止。 错误 [Executor task launch worker-0] executor.Executor:阶段 3.0 中任务 111.0 中的异常(TID 1578) org.apache.spark.SparkException:写入行时任务失败。

后面跟着错误行,

错误 [Executor task launch worker-0] executor.Executor:阶段 3.0 中任务 111.1 中的异常(TID 1892) org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException):/path/to/file/part/_temporary/0/_temporary/attempt_201710160719_0003_m_000111_1/pool_id=891566/part 上没有租约-r-00111-40dd2140-0666-4890-aad9-12fc8ffd6777.gz.parquet(inode 160527519):文件不存在。持有人 DFSClient_NONMAPREDUCE_1835537666_63 没有任何打开的文件。

有没有人遇到过类似的 spark 问题,或者知道该问题的任何解决方法。我查看了 google/spark 问题 jira 我无法从那里找出解决方案

【问题讨论】:

错误在哪里?请edit问题并附上错误文本。 我在扩展 AvroOutputFormat 和使用 saveAsNewAPIHadoopFile(...) 时遇到了类似的问题。你能解决问题吗?谢谢 你是在同一个地方读写吗? 【参考方案1】:

当基础文件已更改并且您仍在尝试访问该文件或发生超时时,会发生错误(在我的观察中)。

我尝试了几次超时选项,然后调整了我的流程以读取和写入不同的位置。为我解决了问题。

【讨论】:

以上是关于Spark 中动态分区的 LeaseExpiredException的主要内容,如果未能解决你的问题,请参考以下文章

图文理解 Spark 3.0 的动态分区裁剪优化

Apache Spark 动态分区 OverWrite 问题

我们如何在 Apache Spark 中执行动态重新分区?

多列上的 Spark 动态分区覆盖产生空白输出

Spark 是不是支持插入覆盖静态分区?

一文了解 Apache Spark 3.0 动态分区裁剪(Dynamic Partition Pruning)