从HDFS到Amazon S3的Hadoop distcp问题

Par*_*esh 9 hadoop amazon-s3 amazon-web-services

我正在尝试使用数据将数据从HDFS移动到S3 distcp.这项distcp工作似乎成功了,但在S3上,文件没有正确创建.有两个问题:

  1. 不复制文件名和路径.所有文件最终都block_<some number>在存储桶的根目录下.
  2. 它在S3上创建了大量额外文件,包含一些元数据和日志.

我找不到任何文档/示例.我错过了什么?我怎么调试?

以下是一些更多细节:

$ hadoop version 
Hadoop 0.20.2-cdh3u0
Subversion  -r 
Compiled by diego on Sun May  1 15:42:11 PDT 2011
From source with checksum 
hadoop fs –ls hdfs://hadoopmaster/data/paramesh/
…<bunch of files>…

hadoop distcp  hdfs://hadoopmaster/data/paramesh/ s3://<id>:<key>@paramesh-test/
$ ./s3cmd-1.1.0-beta3/s3cmd ls s3://paramesh-test

                       DIR   s3://paramesh-test//
                       DIR   s3://paramesh-test/test/
2012-05-10 02:20         0   s3://paramesh-test/block_-1067032400066050484
2012-05-10 02:20      8953   s3://paramesh-test/block_-183772151151054731
2012-05-10 02:20     11209   s3://paramesh-test/block_-2049242382445148749
2012-05-10 01:40      1916   s3://paramesh-test/block_-5404926129840434651
2012-05-10 01:40      8953   s3://paramesh-test/block_-6515202635859543492
2012-05-10 02:20     48051   s3://paramesh-test/block_1132982570595970987
2012-05-10 01:40     48052   s3://paramesh-test/block_3632190765594848890
2012-05-10 02:20      1160   s3://paramesh-test/block_363439138801598558
2012-05-10 01:40      1160   s3://paramesh-test/block_3786390805575657892
2012-05-10 01:40     11876   s3://paramesh-test/block_4393980661686993969
Run Code Online (Sandbox Code Playgroud)

Mat*_*one 15

您应该使用s3n而不是s3.

s3n是本机文件系统实现(即 - 常规文件),使用s3对文件强制执行hdfs块结构,因此如果不通过hdfs库就无法真正读取它们.

从而:

hadoop distcp hdfs://file/1 s3n://bucket/destination
Run Code Online (Sandbox Code Playgroud)