ChatGPT解决这个技术问题 Extra ChatGPT

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

我知道存在 https://wiki.apache.org/hadoop/AmazonS3 和以下词语:

S3 Native FileSystem(URI 方案:s3n)用于在 S3 上读取和写入常规文件的本机文件系统。此文件系统的优点是您可以访问 S3 上使用其他工具编写的文件。相反,其他工具可以访问使用 Hadoop 编写的文件。缺点是 S3 对文件大小施加了 5GB 的限制。 S3A(URI 方案:s3a) S3 Native 的继承者,s3n fs,S3a:系统使用 Amazon 的库与 S3 交互。这允许 S3a 支持更大的文件(不再有 5GB 限制)、更高性能的操作等等。该文件系统旨在成为 S3 Native 的替代品/继任者:从 s3n:// URL 访问的所有对象也应该可以通过替换 URL 模式从 s3a 访问。 S3 块文件系统(URI 方案:s3)由 S3 支持的基于块的文件系统。文件存储为块,就像它们在 HDFS 中一样。这允许有效地实现重命名。此文件系统要求您为文件系统专用一个存储桶 - 您不应使用包含文件的现有存储桶,或将其他文件写入同一存储桶。此文件系统存储的文件可以大于 5GB,但它们不能与其他 S3 工具互操作。

为什么 URI 上的字母更改会产生如此大的影响?例如

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

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

这种变化背后的技术差异是什么?有什么好的文章可以读到吗?


j
jarmod

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

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

s3n 和 s3a 的区别在于,s3n 支持最大 5GB 的对象,而 s3a 支持最大 5TB 的对象并且性能更高(都是因为它使用了多部分上传)。 s3a 是 s3n 的继任者。

根据 Work with Storage and File Systems,使用 EMRFS 时:

以前,Amazon EMR 使用 s3n 和 s3a 文件系统。虽然两者仍然有效,但我们建议您使用 s3 URI 方案以获得最佳性能、安全性和可靠性。

其他对 s3n 和 s3a 的历史参考可以在 Amazon 的 this article 中找到(仅在 Wayback 机器上可用)。


来自 Amazon 的支持文章似乎仍然是最新的,但我现在可以使用 s3a 方案从 EMR 作业写入 S3。答案可能需要修改。
@mig 虽然 s3a 可能有效,而且根据我的经验,它似乎确实有效,但它在技术上不受 AWS 支持。所以,我认为你会自担风险使用它。
@christang 看起来它不再可用,因此提供了回路机器链接。
基本上,AWS 支持建议 s3:// un place of s3a:// 任何支持票
此 AWS 文档 – docs.aws.amazon.com/emr/latest/ManagementGuide/… – 还建议所有应用程序使用“s3://”:“以前,Amazon EMR 使用 s3n 和 s3a 文件系统。虽然两者仍然有效,但我们建议您最好使用 s3 URI 方案性能、安全性和可靠性。”可能值得将此添加到您的答案中
d
danielpops

在 Apache Hadoop 中,“s3://”指的是原始的 S3 客户端,它使用非标准结构来实现可扩展性。该库已弃用,很快将被删除,

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

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

在 Apache Hadoop 中,S3N 和 S3A 都是 S3 的连接器,而 S3A 是使用 Amazon 自己的 AWS 开发工具包构建的继任者。为什么是新名字?所以我们可以把它和稳定的一起装运。 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 & pig 将工作划分为一个任务/字节。您不能在 Hadoop 2.6 中使用 S3a 进行分析工作,即使核心文件系统操作和数据生成是快乐的。 Hadoop 2.7 解决了这个问题。

2018-01-10 更新 Hadoop 3.0 已经削减了它的 s3: 和 s3n 实现:s3a 就是你所得到的。它现在比它的前身要好得多,并且性能至少不亚于亚马逊的实施。 Amazon 的“s3:”仍然由他们的闭源客户端 EMR 提供。有关详细信息,请参阅 EMR docs


A
Aleksandr Panzin

TL;博士

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

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


alexandr,您的数据在哪里支持您对 s3 的声明,特别是您在谈论哪个版本?如果您使用 hadoop 2.7 jar 体验这一切,这些批评在当时是有效的,但时间是 2016 年

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅