我知道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:系统使用Amazon的库与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")
到
val data = sc.textFile("s3a://bucket-name/key")
这一变化背后的技术差异是什么?有什么好文章我可以读到这个吗?
答案 0 :(得分:102)
URI方案中的字母更改会产生很大的不同,因为它会导致使用不同的软件来连接S3。有点像http和https之间的区别 - 它只是一个字母的变化,但它会引发行为上的巨大差异。
s3和s3n / s3a之间的区别在于s3是基于块的覆盖在Amazon S3之上,而s3n / s3a则不是(它们是基于对象的)。
s3n和s3a之间的区别在于s3n支持最大5GB的对象,而s3a支持高达5TB的对象并且具有更高的性能(两者都是因为它使用多部分上传)。 s3a是s3n的继承者。
如果您在这里是因为您想了解应该与Amazon EMR一起使用哪个S3文件系统,请从亚马逊阅读this article(仅在返回机器上可用)。网是:使用s3://因为s3://和s3n://在EMR的上下文中在功能上是可互换的,而s3a://与EMR不兼容。
如需其他建议,请阅读Work with Storage and File Systems。
答案 1 :(得分:36)
在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 docs。
答案 2 :(得分:1)
TL;博士
s3://
s3
或 s3a
直接从您的代码读取/写入大量数据。s3-dist-cp
将数据提取到集群 HDFS,然后将其发送回 S3s3a
仅用于读取少量到中等数量的数据s3a
写入不稳定(在 EMR 和私有硬件集群上部署多个作业时的经验谈)