2014-10-09 39 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