我正在对EMR进行配置,
并且需要将一些文件复制到所有EMR实例。

据我了解,一种方法就是将文件复制到每个节点上的本地文件系统,另一种方法是将文件复制到HDFS,但是我还没有找到一种简单的方法,可以将S3直接复制到HDFS。

最好的方法是什么?

最佳答案

最好的方法是使用Hadoop的distcp命令。示例(在群集节点之一上):
% ${HADOOP_HOME}/bin/hadoop distcp s3n://mybucket/myfile /root/myfile
这会将名为myfile的文件从名为mybucket的S3存储桶复制到HDFS中的/root/myfile。请注意,此示例假定您以“本机”模式使用S3文件系统。这意味着Hadoop将S3中的每个对象视为一个文件。如果改为在块模式下使用S3,则在上例中将s3n替换为s3。有关本机S3和块模式之间差异的更多信息,以及上面示例的详细说明,请参见http://wiki.apache.org/hadoop/AmazonS3

我发现distcp是一个非常强大的工具。除了能够使用它在S3中进出大量文件外,您还可以对大型数据集执行快速的群集到群集的复制。 distcp并没有通过单个节点推送所有数据,而是使用并行的多个节点来执行传输。与将所有内容作为中介复制到本地文件系统的替代方法相比,这在传输大量数据时使distcp相当快。

关于amazon-s3 - 如何将文件从S3复制到Amazon EMR HDFS?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7487292/

10-16 21:30