Spark saveAsTextFile 将空文件 - <directory>_$folder$ 写入 S3
Posted
技术标签:
【中文标题】Spark saveAsTextFile 将空文件 - <directory>_$folder$ 写入 S3【英文标题】:Spark saveAsTextFile writes empty file - <directory>_$folder$ to S3 【发布时间】:2017-12-26 02:07:07 【问题描述】:rdd.saveAsTextFile("s3n://bucket-name/path)
正在创建一个文件夹名称为 - [folder-name]_$folder$
的空文件
似乎hadoop-aws jar (of org.apache.hadoop)
使用这个空文件来模仿 S3 文件系统作为 hadoop 文件系统。
但是,我的应用程序将数千个文件写入 S3。当saveAsTextFile
创建文件夹(从给定路径)以写入数据(从rdd)时,我的应用程序最终创建了数千个这样的空文件-[directory-name]_$folder$
。
有没有办法让rdd.saveAsTextFile
不写这些空文件?
【问题讨论】:
【参考方案1】:停止使用 s3n,切换到 s3a。它更快并且实际受支持。这将使这个问题以及读取大型 Parquet/ORC 文件的严重性能问题消失。
此外,如果您的应用在 S3 中创建了数千个小文件,那么您将在未来产生性能问题:在 S3 上列出和打开文件的速度很慢。尝试将源数据合并到更大的列格式文件中,并使用您的框架必须的任何 SELECT 机制来仅读取您想要的位
【讨论】:
我尝试使用s3a
,但它仍在创建<directory-name>_$folder$
文件。
不,不是。我说刚刚重新检查了S3AFileSystem
的源代码,它位于我面前的IDE 中。 $folder$
后缀在目录检查中被查找,但从未创建。如果它们出现了,那么除了 s3a 之外的其他东西正在这样做。
你能分享一下你正在使用什么文件系统实现吗?即fs.s3a.impl
的值,我用的是org.apache.hadoop.fs.s3native.NativeS3FileSystem
。
就像我说的,你没有使用 s3a。您不必在那里设置任何属性,因为它将从 hadoop-common.jar 中 core-default.xml 的基本配置中选择。只需使用 s3a:// 网址
不,我的工作要求fs.s3a.impl
,但我没有提供。我没有办法更新core-default.xml
(在我正在部署我的应用程序的节点上),所以,火花从core-default
中选择了什么属性/值。以上是关于Spark saveAsTextFile 将空文件 - <directory>_$folder$ 写入 S3的主要内容,如果未能解决你的问题,请参考以下文章
Spark saveAsTextFile写入空文件 - _ $ folder $到S3
spark中saveAsTextFile如何最终生成一个文件
spark中saveAsTextFile如何最终生成一个文件
Spark&Scala:saveAsTextFile()异常