Dan*_*ler 8 amazon-s3 apache-spark parquet apache-spark-sql
尝试在S3上以Parquet格式保存非常大的SchemaRDD时遇到了许多问题.我已经针对这些问题发布了具体问题,但这是我真正需要做的.代码看起来应该是这样的
import org.apache.spark._
val sqlContext = sql.SQLContext(sc)
val data = sqlContext.jsonFile("s3n://...", 10e-6)
data.saveAsParquetFile("s3n://...")
Run Code Online (Sandbox Code Playgroud)
如果我有超过2000个分区或者如果分区大于5G,我会遇到问题.这就是我可以用这种方式处理的最大大小SchemaRDD的上限.由于分区大小差异很大,并且您只需要1个5G分区即可使进程失败,因此最接近1T.
处理我遇到的具体问题的问题是
这个问题是看是否有任何主要目标的解决方案,不一定涉及直接解决上述问题.
要提炼出来,有两个问题
将大于5G的单个分片写入S3失败.AFAIK这是一个内置限制的s3n://桶.它应该是可能的s3://桶,但似乎不起作用Spark和hadoop distcp本地HDFS也不能这样做.
一旦有1000个分片,写入摘要文件往往会失败.这似乎有很多问题.直接写入S3会在上面的链接问题中产生错误.直接写入本地HDFS时,即使在r3.8xlarge(244G ram)上有大约5000个分片,也会产生OOM错误.这似乎与实际数据量无关.摘要文件似乎对高效查询至关重要.
总之,这些问题限制了S3上的Parquet表到25T.在实践中,实际上它实际上要少得多,因为在RDD中分片大小可以变化很大,并且5G限制适用于最大分片.
如何将>> 25T RDD作为Parquet写入S3?
我使用的是Spark-1.1.0.
来自AWS S3文档:
您可以存储的数据总量和对象数量是无限的。单个 Amazon S3 对象的大小范围为 1 字节到 5 TB。单个 PUT 中可以上传的最大对象为 5 GB。对于大于 100 MB 的对象,客户应考虑使用分段上传功能。
解决这个问题的一种方法是:
它还可以减轻您的实例的负载。
要访问该数据,您需要将快照作为 EBS 附加到实例。
| 归档时间: |
|
| 查看次数: |
2113 次 |
| 最近记录: |