【问题标题】:Spark saveAsTextFile writes empty file - <directory>_$folder$ to S3Spark saveAsTextFile 将空文件 - <directory>_$folder$ 写入 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不写这些空文件?

【问题讨论】:

    标签: hadoop apache-spark amazon-s3 apache-spark-sql


    【解决方案1】:

    停止使用 s3n,切换到 s3a。它更快并且实际受支持。这将使这个问题以及读取大型 Parquet/ORC 文件的严重性能问题消失。

    此外,如果您的应用在 S3 中创建了数千个小文件,那么您将在未来产生性能问题:在 S3 上列出和打开文件的速度很慢。尝试将源数据合并到更大的列格式文件中,并使用您的框架必须的任何 SELECT 机制来仅读取您想要的位

    【讨论】:

    • 我尝试使用s3a,但它仍在创建&lt;directory-name&gt;_$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 中选择了什么属性/值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多