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


121

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

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

S3A(URI方案:s3a)S3a:系统是S3本机s3n fs的后继产品,它使用Amazon的库与S3进行交互。这使S3a支持更大的文件(没有更多的5GB限制),更高性能的操作等等。文件系统旨在替代S3本机/作为S3本机的继任者:通过替换URL模式,从s3n:// 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")

此更改的技术差异是什么?有什么好的文章可以阅读吗?

Answers:


136

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

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

s3n和s3a之间的区别在于s3n支持最大5GB的对象,而s3a支持最大5TB的对象并具有更高的性能(这都是因为它使用分段上传)。s3a是s3n的后继者。

如果您在这里是因为您想了解应该与Amazon EMR一起使用的S3文件系统,请阅读本文。从Amazon(仅在Wayback机器上可用)。网络是:使用s3://,因为s3://和s3n://在EMR的上下文中在功能上可以互换,而s3a://与EMR不兼容。

有关其他建议,请阅读《使用存储和文件系统》


13
来自Amazon的支持文章似乎仍然是最新的,但是我现在可以使用该s3a方案从EMR作业写信给S3 。答案可能需要修改。
mlg

1
@mig虽然s3a可能有效,并且按照我的经验看来确实有效,但AWS并不为其提供技术支持。因此,我认为您会自行承担风险。
jarmod

@jarmod您在此处引用的文章不再有效。您可以更新链接吗?
克里斯唐

@christang似乎不再可用,因此提供了回溯机器链接。
jarmod

2
基本上,AWS支持人员建议为任何支持票证使用s3://而不是s3a://的位置
阿比(Abhi)

56

在Apache Hadoop中,“ s3://”是指原始S3客户端,该客户端使用非标准结构来实现可伸缩性。该库已弃用,不久将被删除,

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

在Amazon的EMR服务上,s3://是指Amazon自己的S3客户端,这是不同的。EMR上s3://中的路径直接指向对象库中的对象。

在Apache Hadoop中,S3N和S3A都是S3的连接器,S3A的后继者使用亚马逊自己的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年3月14日实际上是更新,在Hadoop 2.6中的S3a上分区已中断,因为listFiles()调用中返回的块大小为0:Spark和Pig这样的事情将工作划分为一个任务/字节。即使核心文件系统操作和数据生成令人满意,您也无法将S3a用于Hadoop 2.6中的分析工作。Hadoop 2.7修复了该问题。

2018年1月10日更新 Hadoop 3.0削减了其s3:和s3n实现:s3a就是您所得到的。现在,它比以前的版本要好得多,并且性能至少与Amazon实施一样好。亚马逊的“ s3:”仍由EMR提供,这是其封闭源客户端。有关更多信息,请查阅EMR文档

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.