当我将 Hadoop 集群连接到 Amazon 存储器并将下载的文件连接到 HDFS 时,我发现 s3://无法工作。当在互联网上寻找一些帮助,我发现我可以使用 S3n。当我使用 S3n时,它起作用了。我不明白在我的 Hadoop 集群中使用 S3和 S3n的区别,有人能解释一下吗?
s3://
S3n
S3
用于使用 亚马逊 S3的两个文件系统分别记录在相应的 寻址 Amazon S3的 Hadoop wiki 页面中:
S3本机文件系统(URI 方案: s3n) 用于在 S3上读写常规文件的本机文件系统 文件系统是您可以访问 S3上的文件,这些文件是用 相反,其他工具可以访问使用 缺点是 S3 对文件大小的5GB 限制。 由于这个原因,它不适合作为 HDFS 的替代品(其中 支持非常大的文件) S3 Block FileSystem (URI 方案: S3) 一个由 S3支持的基于块的文件系统。文件以块的形式存储,就像它们一样 在 HDFS 中。这允许有效地实现重命名。这 Filessystem 要求您为文件系统专用一个 bucket-you 不应使用包含文件的现有存储桶,或编写其他 这个文件系统存储的文件可以是 大于5GB,但它们不能与其他 S3工具互操作。 有两种方法可以将 S3与 Hadoop 的 Map/Reduce 一起使用, 使用 S3块文件系统 (即。 使用它作为一个可靠的分布式文件系统,支持非常 大文件) ,或作为一个方便的数据输入和存储库 从 MapReduce 输出,使用 S3文件系统 在 Map/Reduce 阶段仍然使用 HDFS [强调我的]
S3本机文件系统(URI 方案: s3n) 用于在 S3上读写常规文件的本机文件系统 文件系统是您可以访问 S3上的文件,这些文件是用 相反,其他工具可以访问使用 缺点是 S3 对文件大小的5GB 限制。 由于这个原因,它不适合作为 HDFS 的替代品(其中 支持非常大的文件)
S3 Block FileSystem (URI 方案: S3) 一个由 S3支持的基于块的文件系统。文件以块的形式存储,就像它们一样 在 HDFS 中。这允许有效地实现重命名。这 Filessystem 要求您为文件系统专用一个 bucket-you 不应使用包含文件的现有存储桶,或编写其他 这个文件系统存储的文件可以是 大于5GB,但它们不能与其他 S3工具互操作。
有两种方法可以将 S3与 Hadoop 的 Map/Reduce 一起使用, 使用 S3块文件系统 (即。 使用它作为一个可靠的分布式文件系统,支持非常 大文件) ,或作为一个方便的数据输入和存储库 从 MapReduce 输出,使用 S3文件系统 在 Map/Reduce 阶段仍然使用 HDFS
[强调我的]
所以差别主要在于如何处理5GB 的限制(也就是 可以在单个 PUT 中上传的最大对象,即使是 对象的大小可以从1字节到5 TB 不等,请参阅 我可以存储多少数据?) : 使用 S3 Block FileSystem (URI 方案: S3)允许补救5GB 的限制并存储高达5TB 的文件,它依次取代 HDFS。
我认为您的主要问题与将 S3和 S3n作为 Hadoop 的两个独立连接点有关。s3n://的意思是“一个普通的文件,从外部世界可读,在这个 S3网址”。s3://是指映射到 AWS 存储集群上的 S3 bucket 中的 HDFS 文件系统。因此,当您使用来自 Amazon 存储桶的文件时,必须使用 S3N,这就是问题得到解决的原因。@ Steffen 添加的信息也很棒! !
s3n://
这里有一个解释: https://notes.mindprince.in/2014/08/01/difference-between-s3-block-and-s3-native-filesystem-on-hadoop.html
第一个支持 S3的 Hadoop 文件系统是在 Hadoop 0.10.0(HADOOP-574)中引入的。它被称为 S3块文件系统,并被分配给 URI 方案 S3://。在这个实现中,文件以块的形式存储,就像在 HDFS 中一样。这个文件系统存储的文件不能与其他 S3工具互操作——这意味着 如果您进入 AWS 控制台并尝试查找由这个文件系统编写的文件,您将找不到它们——相反,您将找到名为 block _-1212312341234512345的文件等等。 为了克服这些限制,Hadoop 0.18.0(HADOOP-930)中引入了另一个支持 S3的文件系统。它被称为 S3本机文件系统,并被分配给 URI 模式 s3n://。这个文件系统允许您访问使用其他工具编写的 S3上的文件... ... 当引入这个文件系统时,S3的文件大小限制为5GB,因此这个文件系统只能操作小于5GB 的文件。在2010年底,亚马逊... 将文件大小限制从5GB 提高到5TB..。 不再推荐使用 S3块文件系统。Qubole 和 Amazon EMR 等各种 Hadoop-as-a-service 提供商甚至将 S3://和 s3n://URI 映射到 S3本机文件系统,以确保这一点。
第一个支持 S3的 Hadoop 文件系统是在 Hadoop 0.10.0(HADOOP-574)中引入的。它被称为 S3块文件系统,并被分配给 URI 方案 S3://。在这个实现中,文件以块的形式存储,就像在 HDFS 中一样。这个文件系统存储的文件不能与其他 S3工具互操作——这意味着 如果您进入 AWS 控制台并尝试查找由这个文件系统编写的文件,您将找不到它们——相反,您将找到名为 block _-1212312341234512345的文件等等。
为了克服这些限制,Hadoop 0.18.0(HADOOP-930)中引入了另一个支持 S3的文件系统。它被称为 S3本机文件系统,并被分配给 URI 模式 s3n://。这个文件系统允许您访问使用其他工具编写的 S3上的文件... ... 当引入这个文件系统时,S3的文件大小限制为5GB,因此这个文件系统只能操作小于5GB 的文件。在2010年底,亚马逊... 将文件大小限制从5GB 提高到5TB..。
不再推荐使用 S3块文件系统。Qubole 和 Amazon EMR 等各种 Hadoop-as-a-service 提供商甚至将 S3://和 s3n://URI 映射到 S3本机文件系统,以确保这一点。
因此,始终使用本机文件系统。不再有5Gb 的限制。有时您可能必须键入 s3://而不是 s3n://,但是请确保您创建的任何文件都可以在浏览器的桶资源管理器中看到。
也请参阅 http://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide/emr-plan-file-systems.html。
以前,Amazon EMR 使用 S3NativeFileSystem 和 URI 模式 s3n。虽然这仍然有效,但我们建议您使用 s3URI 方案以获得最佳性能、安全性和可靠性。
它还说,您可以使用 s3bfs://访问旧的块文件系统,以前称为 s3://。
s3bfs://