S3 和 Spark:文件大小和文件格式最佳实践



我需要将数据(源自具有 5 列的 RedShift 表,表的总大小约为 500gb - 1tb)通过 PySpark 从 S3 读取到 Spark 以进行日常批处理作业。

是否有任何最佳实践:

  • 如何在 S3 中存储数据的首选文件格式? (格式甚至重要吗?
  • 最佳文件大小?

任何可以为我指明正确方向的资源/链接也可以工作。

谢谢!

这篇博文有一些关于这个主题的重要信息:

https://mapr.com/blog/tips-and-best-practices-to-take-advantage-of-spark-2-x/

查看标题为:为您的使用案例使用最佳数据存储的部分

根据个人经验,我更喜欢在大多数情况下使用镶木地板,因为我通常将数据写出一次,然后多次读取(用于分析)。

就文件数量而言,我喜欢在 200 到 1,000 之间。 这允许各种大小的集群并行读取和写入,并使我对数据的读取更加高效,因为使用镶木地板,我可以放大我感兴趣的文件。如果你有太多文件,Spark 会记住所有的文件名和位置,如果你的文件太少,它就无法有效地并行化你的读写。

我发现在使用镶木地板时,文件大小不如文件数量重要。

编辑:

这是那篇博客文章中的一个很好的部分,描述了为什么我喜欢使用镶木地板:

Apache Parquet 使用 Spark 提供最快的读取性能。Parquet 将数据排列在列中,将相关值彼此靠近,以优化查询性能、最大限度地减少 I/O 并促进压缩。Parquet 使用节约资源的技术检测和编码相同或相似的数据。Parquet 还存储列元数据和统计信息,可以将其向下推送以筛选列(如下所述)。Spark 2.x 具有矢量化 Parquet 读取器,可按列批处理进行解压缩和解码,读取性能提高 ~ 10 倍。

最新更新