我在 EMR 上运行 hive , 并需要将一些文件复制到所有 EMR 实例。
据我所知,一种方法是将文件复制到每个节点上的本地文件系统,另一种方法是将文件复制到 HDFS,但是我还没有找到直接从 S3 复制到 HDFS 的简单方法。
解决这个问题的最佳方法是什么?
最佳答案
最好的方法是使用 Hadoop 的 distcp 命令。示例(在其中一个集群节点上):
% ${HADOOP_HOME}/bin/hadoop distcp s3n://mybucket/myfile/root/myfile
这会将名为 myfile 的文件从名为 mybucket 的 S3 存储桶复制到 HDFS 中的 /root/myfile
。请注意,此示例假定您在“ native ”模式下使用 S3 文件系统;这意味着 Hadoop 将 S3 中的每个对象视为一个文件。如果您改为在 block 模式下使用 S3,则需要将上例中的 s3n 替换为 s3。有关 native S3 和 block 模式之间差异的更多信息,以及对上述示例的详细说明,请参阅 http://wiki.apache.org/hadoop/AmazonS3 .
我发现 distcp 是一个非常强大的工具。除了能够使用它来将大量文件复制进出 S3 之外,您还可以对大型数据集执行快速的集群到集群复制。 distcp 不是通过单个节点推送所有数据,而是使用多个并行节点来执行传输。与作为中介将所有内容复制到本地文件系统的替代方案相比,这使得 distcp 在传输大量数据时要快得多。
关于amazon-s3 - 如何将文件从 S3 复制到 Amazon EMR HDFS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487292/