用Hadoop DistCp使用由HDFS到Amazon S3问题 [英] Problems with Hadoop distcp from HDFS to Amazon S3
问题描述
我试图从HDFS移动数据使用 DistCp使用
至S3。该 DistCp使用
的工作似乎取得成功,但在S3上的文件都不会被正确创建。这里有两个问题:
- 在文件名和路径不被复制。所有文件最终成为
block_<有的数量和GT;
在叶片的根部 - 在它创造一大堆的一些元数据和日志在S3上额外的文件。
我找不到任何文档/例子这一点。我在想什么?如何调试?
下面是一些更多的细节:
$的Hadoop版本
Hadoop的0.20.2-cdh3u0
颠覆-r
在Sun 5月1日15时42分11秒PDT 2011编译由Diego
从源校验
Hadoop的FS -ls HDFS:// hadoopmaster /数据/ paramesh /
...<一批文件制造> ...
Hadoop的HDFS DistCp使用:// hadoopmaster /数据/ paramesh / S3://< ID>:<键> @ paramesh测试/
$ ./s3cmd-1.1.0-beta3/s3cmd LS S3:// paramesh测试
DIR S3:// paramesh测试//
DIR S3:// paramesh测试/检验/
2012年5月10号2点20 0 S3:// paramesh测试/ block_-1067032400066050484
2012-05-10 02:20 8953 S3:// paramesh测试/ block_-183772151151054731
2012-05-10 02:20 11209 S3:// paramesh测试/ block_-2049242382445148749
2012-05-10 01:40 1916年S3:// paramesh测试/ block_-5404926129840434651
2012年5月10号1时40 8953 S3:// paramesh测试/ block_-6515202635859543492
2012年5月10号2点20 48051 S3:// paramesh测试/ block_1132982570595970987
2012年5月10号1时40 48052 S3:// paramesh测试/ block_3632190765594848890
2012年5月10号2点20 1160 S3:// paramesh测试/ block_363439138801598558
2012年5月10号1时40 1160 S3:// paramesh测试/ block_3786390805575657892
2012年5月10号1时40 11876 S3:// paramesh测试/ block_4393980661686993969
您应该使用,而不是S3 S3N。
S3N是本机文件系统实现。(即 - 常规文件),对文件使用S3强加HDFS块结构,所以你不能真正读懂它们,而无需通过HDFS库
这样:
Hadoop的HDFS DistCp使用://文件/ 1 S3N://桶/目标
I am trying to move data from HDFS to S3 using distcp
. The distcp
job seems to succeed, but on S3 the files are not being created correctly. There are two issues:
- The file names and paths are not replicated. All files end up as
block_<some number>
at the root of the bucket. - It creates bunch of extra files on S3 with some meta data and logs.
I could not find any documentation/examples for this. What am I missing? How can I debug?
Here are some more details:
$ 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
You should use s3n instead of s3.
s3n is the native file system implementation (ie - regular files), using s3 imposes hdfs block structure on the files so you can't really read them without going through hdfs libraries.
Thus:
hadoop distcp hdfs://file/1 s3n://bucket/destination
这篇关于用Hadoop DistCp使用由HDFS到Amazon S3问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!