2011-09-20 185 views
23

我跑了蜂巢EMR,01​​,需要一些文件复制到所有EMR实例。我的理解就是将文件复制到本地文件系统中的其他每个节点上如何将文件从S3复制到Amazon EMR HDFS?

的一种方法是将文件复制到HDFS,但是我还没有找到一个简单的方法来从S3复制到挺直HDFS。

什么是最好的方式去做这件事?

回答

26

做到这一点的最好办法是使用Hadoop的DistCp使用命令。实施例(在集群节点中的一个):

% ${HADOOP_HOME}/bin/hadoop distcp s3n://mybucket/myfile /root/myfile

这将在HDFS从名为mybucket S3桶复制称为MYFILE文件/root/myfile。请注意,这个例子假设你在“native”模式下使用S3文件系统;这意味着Hadoop将S3中的每个对象视为一个文件。如果你在块模式下使用S3,你可以在上面的例子中用s3替换s3n。有关本机S3和块模式之间的区别的详细信息,以及上面的例子的阐述,见http://wiki.apache.org/hadoop/AmazonS3

我发现DistCp使用是一个非常强大的工具。除了能够使用它来大量文件复制进出S3的,也可以进行快速集群,以集群方式复制大型数据集。 distcp不是通过单个节点来推送所有数据,而是使用多个并行的节点来执行传输。这种传输大量数据的时候,比起复制一切本地文件系统作为中介的替代显着,使DistCp使用速度更快。

+0

使用distcp将s3移动到hdfs时仍然出现一些错误。在我的情况下,我想移动非常大的文件(超过300GB)移动40或50%后,开始形式开始不知道为什么。任何想法?? – rht

3

请注意,根据亚马逊,在http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/FileSystemConfig.html“Amazon Elastic MapReduce - 文件系统配置”中,S3 Block FileSystem已被弃用,其URI前缀现在是s3bfs://并且他们特别不鼓励使用它,因为“它可以触发竞争条件可能会导致你的工作流失败“。

根据同一页,HDFS现在是S3下的“一流”文件系统,虽然它是短暂的(当Hadoop作业结束时会消失)。

15

现在亚马逊本身有一个通过distcp实现的包装,即:s3distcp

S3DistCp是DistCp使用经过优化与 亚马逊网络服务(AWS)的工作,特别是亚马逊简单存储服务 (亚马逊S3)的延伸。您可以将S3DistCp作为工作流程中的一个步骤添加。 使用S3DistCp,您可以高效地将大量数据从亚马逊S3的 复制到HDFS,然后您的Amazon Elastic MapReduce(Amazon EMR)作业流中的后续步骤可以通过 进行处理。您还可以使用 S3DistCp复制亚马逊的S3桶S3之间或从HDFS亚马逊 数据

示例复制从Amazon S3日志文件到HDFS

这下面的例子说明如何复制日志文件存储在Amazon S3存储桶中到HDFS中。在本例中,--srcPattern选项用于限制复制到守护程序日志的数据。

elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar \ 
s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \ 
--args '--src,s3://myawsbucket/logs/j-3GY8JC4179IOJ/node/,\ 
--dest,hdfs:///output,\ 
--srcPattern,.*daemons.*-hadoop-.*' 
相关问题