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

Hel*_*lad 105 amazon-s3 amazon-web-services aws-sdk

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

S3 Native FileSystem(URI scheme:s3n)用于在S3上读取和写入常规文件的本机文件系统.此文件系统的优点是您可以访问使用其他工具编写的S3上的文件.相反,其他工具可以访问使用Hadoop编写的文件.缺点是S3强加的文件大小限制为5GB.

S3A(URI方案:s3a)S3 Native的继承者s3n fs,S3a:系统使用亚马逊的库与S3交互.这允许S3a支持更大的文件(不超过5GB限制),更高性能的操作等等.文件系统旨在替代S3 Native的/后继者:只需替换URL模式,也可以从s3a访问从s3n:// URL访问的所有对象.

S3 Block FileSystem(URI scheme:s3)由S3支持的基于块的文件系统.文件存储为块,就像它们在HDFS中一样.这允许有效地实现重命名.此文件系统要求您为文件系统专用存储桶 - 不应使用包含文件的现有存储桶,也不应将其他文件写入同一存储桶.此文件系统存储的文件可能大于5GB,但它们不能与其他S3工具互操作.

为什么URI上的字母更改会产生这样的差异?例如

val data = sc.textFile("s3n://bucket-name/key")
Run Code Online (Sandbox Code Playgroud)

val data = sc.textFile("s3a://bucket-name/key")
Run Code Online (Sandbox Code Playgroud)

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

jar*_*mod 120

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

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

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

如果你在这里是因为你想了解哪些S3文件系统应该与Amazon EMR一起使用,那么请阅读亚马逊上的这篇文章(仅在返回机器上提供).网是:使用s3://因为s3://和s3n://在EMR的上下文中在功能上是可互换的,而s3a://与EMR不兼容.

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

  • 来自亚马逊的支持文章似乎仍然是最新的,但我现在可以使用`s3a`方案从EMR作业写入S3.应该修改答案. (7认同)
  • 此 AWS 文档 – https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-file-systems.html – 还建议所有应用程序使用“s3://”:“以前,Amazon EMR 使用s3n 和 s3a 文件系统。虽然两者仍然可以工作,但我们建议您使用 s3 URI 方案以获得最佳性能、安全性和可靠性。” 可能值得将其添加到您的答案中 (3认同)
  • 基本上,AWS 支持建议 s3:// un place of s3a:// 对于任何支持票 (2认同)

Ste*_*ran 48

在Apache Hadoop中,"s3://"指的是原始的S3客户端,它使用非标准结构来实现可伸缩性.该库已弃用,很快就会被删除,

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

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

在Apache Hadoop中,S3N和S3A都是S3的连接器,S3A是使用亚马逊自己的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&pig之类的东西将工作划分为一个任务/字节.即使核心文件系统操作和数据生成很满意,也无法在Hadoop 2.6中使用S3a进行分析工作.Hadoop 2.7修复了这个问题.

2018-01-10更新 Hadoop 3.0已经削减了它的s3:和s3n实现:s3a就是你得到的.它现在明显优于其前身,并且表现至少与亚马逊实施一样好.亚马逊的"s3:"仍由EMR提供,EMR是他们的封闭源客户端.有关详细信息,请参阅EMR文档.