从技术上讲,s3n、 s3a 和 s3之间的区别是什么?

我知道 https://wiki.apache.org/hadoop/AmazonS3的存在,以及下面的话:

S3本机文件系统(URI 方案: s3n)在 S3上读写常规文件的本机文件系统。这种文件系统的优点是您可以访问使用其他工具编写的 S3上的文件。相反,其他工具可以访问使用 Hadoop 编写的文件。缺点是 S3对文件大小的5GB 限制。

S3A (URI scheme: S3A) S3A: system 是 S3Natives3nfs 的继承者,它使用 Amazon 的库与 S3进行交互。这允许 S3a 支持更大的文件(不超过5GB 的限制)、更高的性能操作等等。该文件系统旨在替代/继承 S3本机: 所有可从 s3n://URL 访问的对象也应该只需替换 URL 模式即可从 s3a 访问。

S3 Block FileSystem (URI scheme: S3) S3支持的基于块的文件系统。文件以块的形式存储,就像在 HDFS 中一样。这允许有效地实现重命名。这个文件系统要求您为文件系统指定一个存储桶——您不应该使用包含文件的现有存储桶,或者将其他文件写入同一个存储桶。这个文件系统存储的文件可以大于5GB,但是它们不能与其他 S3工具互操作。

例如,为什么 URI 上的字母更改可以产生如此大的差异

val data = sc.textFile("s3n://bucket-name/key")

val data = sc.textFile("s3a://bucket-name/key")

这种变化背后的技术差异是什么? 有什么好的文章我可以阅读这方面的?

114334 次浏览

URI 方案的字母更改产生了很大的不同,因为它导致使用不同的软件来接口到 S3。有点像 http 和 https 之间的区别——这只是一个字母的改变,但它会引发行为上的巨大差异。

S3和 s3n/s3a 的区别在于,s3是 Amazon S3之上的基于块的覆盖,而 s3n/s3a 不是(它们是基于对象的)。

S3n 和 s3a 的不同之处在于,s3n 支持大小不超过5GB 的对象,而 s3a 支持大小不超过5TB 的对象并具有更高的性能(两者都是因为它使用多部分上传)。S3a 是 s3n 的继承者。

使用电子储税券计划时,按 使用存储和文件系统:

以前,Amazon EMR 使用 s3n 和 s3a 文件系统。虽然这两种方法仍然可以工作,但我们建议您使用 s3URI 方案以获得最佳性能、安全性和可靠性。

其他关于 s3n 和 s3a 的历史参考可以在 Amazon 的 这篇文章上找到(只能在 wayback machine 上找到)。

在 Apache Hadoop 中,“ S3://”指的是原始的 S3客户机,它使用了一种非标准的可伸缩性结构。那个库已经被废弃了,很快就会被删除,

S3n 是它的继承者,它使用对象的直接路径名,因此您可以使用其他应用程序读写数据。像 S3://一样,它使用 jets3t.jar 与 S3通信。

在 Amazon 的 EMR 服务中,S3://指的是 Amazon 自己的 S3客户机,这是不同的。EMR 上 s3://中的路径直接引用对象存储中的对象。

在 Apache Hadoop 中,S3N 和 S3A 都是到 S3的连接器,S3A 是使用 Amazon 自己的 AWS SDK 构建的后继者。 为什么取这个新名字?这样我们就可以把它和那个稳定的一起运出去了。S3A 是所有正在进行的可伸缩性、性能、安全性等方面的工作所在。S3N 被单独留下,所以我们不打破它。S3A 在 Hadoop 2.6中发布,但在2.7之前一直处于稳定状态,主要是出现了一些小规模问题。

如果您正在使用 Hadoop 2.7或更高版本,请使用 s3a。如果您正在使用 Hadoop 2.5或更早版本。S3n,如果你使用 Hadoop 2.6,这是一个艰难的选择。- 如果有问题,我会试试 s3a 然后切换回 s3n-

有关历史的更多信息,请参见 http://hortonworks.com/blog/history-apache-hadoops-support-amazon-s3/

2017-03-14更新 实际上,在 Hadoop 2.6的 S3a 上,分区被破坏了,因为在 listFiles()调用中返回的块大小为0: 像 Spark & hog 这样的事情将工作分割成一个任务/字节。你不能在 Hadoop 2.6中使用 S3a 进行分析工作,即使核心文件系统操作和数据生成很顺利。Hadoop 2.7解决了这个问题。

2018-01-10更新 Hadoop 3.0已经削减了它的 s3: 和 s3n 实现: s3a 是你的全部。它现在明显优于其前身,并且性能不如 Amazon 实现。Amazon 的“ s3:”仍然由 EMR 提供,EMR 是他们的封闭源代码客户端。查询 电子病历了解更多信息。

DR

  1. AWS EMR 只使用 s3://
  2. S3的非 EMR 集群限制使用。
    • 不要使用 s3s3a直接从代码中读写大量数据。
    • 使用 s3-dist-cp获取数据到集群 HDFS,然后将其发送回 S3
    • s3a只适用于读取一些小到中等数量的数据
    • s3a写作不稳定

(谈谈在 EMR 和私有硬件集群上部署多个作业时的经验)