Spark_临时创建原因

Posted

技术标签:

【中文标题】Spark_临时创建原因【英文标题】:Spark _temporary creation reason 【发布时间】:2018-04-03 14:34:51 【问题描述】:

为什么spark在将结果保存到文件系统时,会将结果文件上传到_temporary目录,然后将它们移动到输出文件夹,而不是直接上传到输出文件夹?

【问题讨论】:

【参考方案1】:

两阶段过程是在使用文件系统时确保最终结果一致性的最简单方法。

您必须记住,每个执行器线程都独立于其他线程写入其结果集,并且写入可以在不同的时刻执行,甚至可以重用同一组资源。在写入的那一刻,Spark 无法确定是否所有写入都会成功。

如果发生故障,可以通过删除临时目录来回滚更改。 如果成功,可以通过移动临时目录来提交更改。

此模型的另一个好处是在进行中的写入和最终输出之间有明显的区别。因此,它可以轻松地与简单的工作流管理工具集成,而无需单独的状态存储或其他同步机制。

此模型简单、可靠,并且适用于为其设计的文件系统。不幸的是,它在不支持移动的对象存储中表现不佳。

【讨论】:

_temporary 目录应该在作业运行完成后被删除吗? @OmkarPuttagunta 通常应该(准确地说应该是原子移动)。但是,在某些情况下,此步骤无法完成 - ***.com/q/51603404/6910411 就我而言,我在standalone mode 中运行并且集群上没有HDFS!所以它的写作在一个工人中创建part files,另一方面它总是在_temporary/中创建part files ,我认为这是问题 @OmkarPuttagunta 是的,如果没有共享存储写入过程将无法完成 - 您将有部分(未提交)结果分散在整个集群中。

以上是关于Spark_临时创建原因的主要内容,如果未能解决你的问题,请参考以下文章

创建具有相同名称但不同数据路径的多个临时表

Spark创建或替换临时视图不多次更新现有表

s3上的Spark Dataset Parquet分区创建临时文件夹

sparksql 表定义 存储在哪

Spark+ES+ClickHouse 构建DMP用户画像

Spark:在查询中两次使用临时表?