2014-10-09 38 views
0

有没有办法将S330的文件列表复制到hdfs而不是使用s3distcp的完整文件夹?这是当srcPattern不能工作时。s3distcp的多个源文件

我有一个s3文件夹中的多个文件都有不同的名称。我只想将特定文件复制到hdfs目录。我没有找到任何方法指定s3distcp的多个源文件路径。我目前使用

解决方法是告诉在srcPattern

hadoop jar s3distcp.jar 
    --src s3n://bucket/src_folder/ 
    --dest hdfs:///test/output/ 
    --srcPattern '.*somefile.*|.*anotherone.*' 

中的所有文件名可这件事情时,工作文件的数量实在是太多了?像大约10 000?

回答

2

是的,你可以。用你需要的所有文件创建一个清单文件并使用--copyFromManifest选项如上所述here

+0

你的意思是我应该写所有文件名(S3路径)显示罚款? – 2014-12-12 12:50:00

+0

是的。如果你想要一个清单文件的例子,只需使用--outputManifest选项运行s3distcp,它将生成所有拷贝文件的清单文件。 – 2014-12-14 12:27:55

+0

我试过通过生成我想要的50k文件的列表(以清单格式),但是这种情况下不清楚在所需的“ - src”参数中使用了什么。 – conradlee 2016-08-04 18:17:01

4

hadoop distcp应该可以解决你的问题。 我们可以使用distcp将数据从s3复制到hdfs。

它还支持通配符,我们可以在命令中提供多个源路径。

http://hadoop.apache.org/docs/r1.2.1/distcp.html

经过用法部分在这个特定的URL

例: 考虑你在test1的文件夹内的S3存储桶(测试桶)以下文件。

和TEST2文件夹内你有

hijk.txt 
hjikl.txt 
xyz.txt 

而且你的HDFS路径为hdfs://localhost.localdomain:9000/user/test/

然后DistCp使用命令是针对一个特定的模式如下。

hadoop distcp s3n://test-bucket/test1/ab*.txt \ s3n://test-bucket/test2/hi*.txt hdfs://localhost.localdomain:9000/user/test/ 
+0

问题是,我需要使用s3distcp的--compressionCodec选项,该选项不适用于distcp,这就是为什么我不能使用DistCp使用。 – 2014-10-25 12:21:35