Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop中AmazonS3和S3n的差异_Hadoop_Amazon S3_Hdfs - Fatal编程技术网

Hadoop中AmazonS3和S3n的差异

Hadoop中AmazonS3和S3n的差异,hadoop,amazon-s3,hdfs,Hadoop,Amazon S3,Hdfs,当我将Hadoop集群连接到Amazon存储并将文件下载到HDFS时,我发现s3://不起作用。在网上寻求帮助时,我发现我可以使用S3n。当我使用S3n时,它起作用了。我不明白在Hadoop集群中使用S3和S3n之间的区别,有人能解释一下吗?这两个文件系统的使用分别记录在以下文件中: S3本机文件系统(URI方案:s3n) 本机文件系统,用于读取和写入S3上的常规文件。这样做的好处是什么 文件系统是指您可以访问S3上使用 其他工具相反,其他工具可以访问使用 Hadoop。缺点是S3对文件大小施

当我将Hadoop集群连接到Amazon存储并将文件下载到HDFS时,我发现
s3://
不起作用。在网上寻求帮助时,我发现我可以使用
S3n
。当我使用
S3n
时,它起作用了。我不明白在Hadoop集群中使用
S3
S3n
之间的区别,有人能解释一下吗?

这两个文件系统的使用分别记录在以下文件中:

  • S3本机文件系统(URI方案:s3n)
    本机文件系统,用于读取和写入S3上的常规文件。这样做的好处是什么 文件系统是指您可以访问S3上使用 其他工具相反,其他工具可以访问使用 Hadoop。缺点是S3对文件大小施加了5GB的限制。 因此,它不适合作为HDFS的替代品 支持非常大的文件)

  • S3块文件系统(URI方案:S3)
    由S3支持的基于块的文件系统。文件存储为块,就像它们一样 都在HDFS中。这样可以有效地实施重命名。这 文件系统要求您为文件系统专用一个存储桶—您 不应使用包含文件的现有存储桶,或写入其他 将文件保存到同一个存储桶中此文件系统存储的文件可以是 大于5GB,但不能与其他S3工具互操作

有两种方法可以将S3与Hadoop的Map/Reduce结合使用, 使用S3块文件系统替代HDFS。 将其用作可靠的分布式文件系统,并支持 大文件)或作为方便的存储库,用于向和输入数据 使用S3文件系统从MapReduce输出。在第二种情况下 HDFS仍用于映射/缩减阶段。[……]

[我的重点]


因此,差异主要与5GB限制的处理方式有关(这是一次PUT中可以上载的最大对象,尽管对象的大小可以从1字节到5 TB不等,请参阅):使用S3块文件系统(URI方案:S3)允许纠正5GB限制并存储高达5TB的文件,它依次替换HDFS。

我认为您的主要问题与将
S3
S3n
作为Hadoop的两个独立连接点有关
s3n://
表示“在这个s3url上,从外部世界可以读取的常规文件”<代码>s3://指映射到位于AWS存储集群上的s3存储桶中的HDFS文件系统。所以,当您使用来自Amazon存储桶的文件时,您必须使用S3N,这就是您的问题得以解决的原因。@Steffen添加的信息也很棒

以下是一个解释:

第一个支持S3的Hadoop文件系统是在Hadoop 0.10.0(Hadoop-574)中引入的。它被称为S3块文件系统,并被分配URI方案S3://。在这个实现中,文件以块的形式存储,就像在HDFS中一样。此文件系统存储的文件不能与其他S3工具互操作-这意味着如果您转到AWS控制台并尝试查找此文件系统写入的文件,您将找不到它们-相反,您将找到名为block_231;-1212312341234512345等的文件

为了克服这些限制,Hadoop 0.18.0(Hadoop-930)中引入了另一个支持S3的文件系统。它被称为S3本机文件系统,并被分配了URI方案s3n://。此文件系统允许您访问S3上使用其他工具编写的文件。。。引入此文件系统时,S3的文件大小限制为5GB,因此此文件系统只能使用小于5GB的文件进行操作。2010年末,亚马逊。。。将文件大小限制从5GB提高到5TB

不再推荐使用S3块文件系统。各种Hadoop-as-a-service提供商(如Qubole和Amazon EMR)都将S3://和s3n://URI映射到S3本机文件系统,以确保这一点

因此,请始终使用本机文件系统。没有更多5Gb的限制。有时您可能需要键入
s3://
,而不是
s3n://
,但只需确保您创建的任何文件在浏览器的bucket explorer中可见即可

另见

以前,AmazonEMR使用S3本机文件系统和URI方案s3n。虽然这仍然有效,但我们建议您使用S3URI方案以获得最佳性能、安全性和可靠性


它还说,您可以使用
s3bfs://
访问旧的块文件系统,以前称为
s3://

我的示例文件大约为60MB,在这种情况下,我可以使用s3或s3n,但只有s3n工作。如果唯一的区别是5GB的文件大小限制,那么s3和s3n都必须工作,但没有..s3支持每个对象最多5 TB,它只需要分多个部分上传,请参阅:@LaurenceRowe:这实际上是在报价中暗示的,排序(可以大于5GB),但是感谢你指出了之后可能会令人困惑的措辞——我试图结合你的评论来澄清这一点。我有一个问题,Steffen,我通常会创建一个位于S3上的HIVE外部表,它工作得非常完美。该文件是BSON,使用mongo hadoop连接器。但大多数时候我的BSON文件都超过5GB,比如18GB。我如何用这么多的文件创建外部表?我已经把我的文件放在了bucket中,我不介意它是否只被hadoop锁定,但是它说如果你选择S3阻塞文件系统,你不应该使用包含文件的现有bucket。如何从S3上大于5GB的文件创建外部表?谢谢Steffen。5Gb的限制我知道了为什么会出现问题。谢谢。我相信在AWS EMR内部,s3:和