在S3上以Parquet格式保存>> 25T SchemaRDD
尝试在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的最大大小的上限。 由于分区大小差异很大,您只需要1个5G分区就可以使进程失败,因此实际的限制更接近1T。
处理我遇到的具体问题的问题是
这个问题是为了看看是否有任何解决方案的主要目标不一定涉及直接解决上述问题。
蒸馏东西有两个问题
将大于5G的单个分片写入S#失败。 AFAIK这是一个内置的s3n://
桶的限制。 对于s3://
存储区应该是可行的,但似乎并不适用于Spark,而本地HDFS的hadoop distcp
也无法执行。
一旦有1000个碎片,写入总结文件往往会失败。 这似乎有多个问题。 直接写入S3会在上面的链接问题中产生错误。 当直接写入本地HDFS时,即使在r3.8xlarge(244G RAM)上,当出现大约5000个碎片时,也会产生OOM错误。 这似乎与实际数据量无关。 摘要文件对于高效查询似乎很重要。
总而言之,这些问题限制了S3上的镶木地板到25T。 在实践中,它实际上明显更少,因为RDD中的碎片大小可以变化很大,并且5G限制适用于最大的碎片。
我如何写一个>> 25T RDD作为Parquet到S3?
我正在使用Spark-1.1.0。
来自AWS S3文档:
您可以存储的数据总量和对象数量不受限制。 各个Amazon S3对象的大小范围可以从1字节到5太字节。 可以在单个PUT中上传的最大对象是5千兆字节。 对于大于100兆字节的对象,客户应考虑使用分段上传功能。
解决这个问题的一种方法是:
它也会给你的实例带来更小的负载。
要访问该数据,您需要将快照作为EBS附加到实例。
链接地址: http://www.djcxy.com/p/23057.html