使用distcp或s​​3distcp将文件从S3复制到HDFS

时间:2014-03-27 05:06:52

标签: java hadoop amazon-web-services amazon-s3

我正在尝试使用以下命令将文件从S3复制到HDFS:

hadoop distcp s3n://bucketname/filename hdfs://namenodeip/directory

但是这不起作用,收到如下错误:

ERROR tools.DistCp: Exception encountered 
java.lang.IllegalArgumentException: Invalid hostname in URI

我曾尝试在hadoop conf.xml中添加S3密钥,但它也无法正常工作。请帮我逐步完成从S3到HDFS的文件复制步骤。

提前致谢。

2 个答案:

答案 0 :(得分:6)

命令应该是这样的:

Hadoop distcp s3n://bucketname/directoryname/test.csv /user/myuser/mydirectory/

这会将test.csv文件从S3复制到指定HDFS路径中名为/ mydirectory的HDFS目录。 在这个S3文件系统中正在以纯模式使用。有关详细信息,请参阅http://wiki.apache.org/hadoop/AmazonS3

答案 1 :(得分:1)

将存储在Amazon S3存储桶中的日志文件复制到HDFS中。这里--srcPattern选项用于限制复制到守护程序日志的数据。

Linux,UNIX和Mac OS X用户:

./elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar \
/home/hadoop/lib/emr-s3distcp-1.0.jar \
--args '--src,s3://myawsbucket/logs/j-3GY8JC4179IOJ/node/,\
--dest,hdfs:///output,\
--srcPattern,.*daemons.*-hadoop-.*'

Windows用户:

ruby elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar /home/hadoop/lib/emr-s3distcp-1.0.jar --args '--src,s3://myawsbucket/logs/j-3GY8JC4179IOJ/node/,--dest,hdfs:///output,--srcPattern,.*daemons.*-hadoop-.*'

请查看此链接了解更多信息:
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html

希望这有帮助!