[英]Spark s3 write (s3 vs s3a connectors)
我正在做一项在 EMR 上运行的工作,它在 s3 上保存了数千个分区。 分区是年/月/日。
我有过去 50 年的数据。 现在,当 spark 写入 10000 个分区时,使用s3a
连接需要大约 1 小时。 它非常慢。
df.repartition($"year", $"month", $"day").write.mode("append").partitionBy("year", "month", "day").parquet("s3a://mybucket/data")
然后我尝试只使用 s3 前缀,只花了几分钟就将所有分区保存在 S3 上。
df.repartition($"year", $"month", $"day").write.mode("append").partitionBy("year", "month", "day").parquet("s3://mybucket/data")
当我覆盖 1000 个分区时,s3 与s3a
相比非常快
df
.repartition($"year", $"month", $"day")
.write
.option("partitionOverwriteMode", "dynamic")
.mode("overwrite").partitionBy("year", "month", "day")
.parquet("s3://mybucket/data")
据我了解,s3a比较成熟,目前正在使用。 s3/s3n 是旧的连接器,它们已被弃用。 所以我想知道该用什么? 我应该使用's3`吗? 与将数据保存到 s3 的 EMR 作业一起使用的最佳 s3 连接或 s3 URI 是什么?
正如 Stevel 所指出的,Amazon EMR 中使用的 s3:// 连接器是由 amazon 构建的,用于 EMR 与 S3 交互,根据Amazon EMR Work with storage and file systems推荐的方法:
以前,Amazon EMR 使用 s3n 和 s3a 文件系统。 虽然两者仍然有效,但我们建议您使用 s3 URI 方案以获得最佳性能、安全性和可靠性。
一些更有趣的东西:Apache Hadoop 社区也开发了自己的 S3 连接器,S3a:// 是积极维护的连接器。 Hadoop 社区还使用了一个名为 S3:// 的连接器,这可能会增加混乱。 来自hadoop 文档:
S3 还有其他 Hadoop 连接器。 只有 S3A 由 Hadoop 项目本身积极维护。
- Apache 的 Hadoop 的原始 s3:// 客户端。 这不再包含在 Hadoop 中。
- Amazon EMR 的 s3:// 客户端。 这是来自积极维护它的 Amazon EMR 团队。
- Apache 的 Hadoop 的 s3n:文件系统客户端。 此连接器不再可用:用户必须迁移到较新的 s3a: 客户端。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.