【问题标题】:Saving a >>25T SchemaRDD in Parquet format on S3在 S3 上以 Parquet 格式保存 >>25T SchemaRDD
【发布时间】:2014-12-07 13:52:52
【问题描述】:

我在尝试在 S3 上以 Parquet 格式保存非常大的 SchemaRDD 时遇到了许多问题。我已经针对这些问题发布了具体问题,但这是我真正需要做的。代码应该是这样的

import org.apache.spark._
val sqlContext = sql.SQLContext(sc)
val data = sqlContext.jsonFile("s3n://...", 10e-6)
data.saveAsParquetFile("s3n://...")

如果我有超过 2000 个分区或分区大于 5G,我会遇到问题。 这为我可以通过这种方式处理的最大 SchemaRDD 设置了一个上限。 实际限制接近 1T,因为分区大小差异很大,您只需要 1 个 5G 分区即可让进程失败。

处理我遇到的具体问题的问题是

这个问题是看看是否有任何解决主要目标的方法,不一定涉及直接解决上述问题之一。


要提炼事情有两个问题

  • 将大于 5G 的单个分片写入 S3 失败。 AFAIK 这是s3n:// 存储桶的内置限制。 s3:// 存储桶应该可以,但似乎在 Spark 中不起作用,而本地 HDFS 中的 hadoop distcp 也无法做到。

  • 一旦有 1000 个分片,写入摘要文件往往会失败。这似乎有多个问题。直接写入 S3 会产生上述链接问题中的错误。直接写入本地 HDFS 会产生 OOM 错误,即使在 r3.8xlarge(244G 内存)上,当大约有 5000 个分片时也是如此。这似乎与实际数据量无关。摘要文件似乎对于高效查询至关重要。

综合这些问题,将 S3 上的 Parquet 表限制为 25T。在实践中,它实际上要小得多,因为一个 RDD 内的分片大小可能会有很大差异,并且 5G 限制适用于最大的分片。

如何将 >>25T RDD 作为 Parquet 写入 S3?

我正在使用 Spark-1.1.0。

【问题讨论】:

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


    【解决方案1】:

    来自 AWS S3 文档:

    您可以存储的数据总量和对象数量不受限制。单个 Amazon S3 对象的大小范围为 1 字节到 5 TB。可以在单个 PUT 中上传的最大对象为 5 GB。对于大于 100 兆字节的对象,客户应考虑使用分段上传功能。

    解决这个问题的一种方法:

    • 将 EBS 卷附加到您的系统,并对其进行格式化。
    • 将文件复制到“本地”EBS 卷。
    • 对卷进行快照,它会自动进入您的 S3。

    它还可以减少实例的负载。

    要访问该数据,您需要将快照作为 EBS 附加到实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2021-08-15
      • 2020-10-06
      相关资源
      最近更新 更多