繁体   English   中英

Spark s3 写入(s3 与 s3a 连接器)

[英]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 项目本身积极维护。

  1. Apache 的 Hadoop 的原始 s3:// 客户端。 这不再包含在 Hadoop 中。
  2. Amazon EMR 的 s3:// 客户端。 这是来自积极维护它的 Amazon EMR 团队。
  3. Apache 的 Hadoop 的 s3n:文件系统客户端。 此连接器不再可用:用户必须迁移到较新的 s3a: 客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM