8

在尝试在 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 中不起作用,并且hadoop distcp本地 HDFS 也无法做到。

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

这些问题加在一起将 S3 上的 Parquet 表限制为 25T。在实践中,它实际上要小得多,因为分片大小在一个 RDD 内变化很大,并且 5G 限制适用于最大的分片。

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

我正在使用 Spark-1.1.0。

4

1 回答 1

4

来自 AWS S3 文档:

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

解决此问题的一种方法:

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

它还为您的实例提供了较小的负载。

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

于 2015-04-11T12:36:41.300 回答