2017-05-08 264 views
0

我在HDFS中有2個以下的文件和1個目錄。s3distcp從一個命令將文件和目錄從HDFS複製到S3

-rw-R - R-- 1級的hadoop的hadoop 11194859個2017年5月5日19時53分HDFS:///outputfiles/abc_output.txt
drwxr-XR-X - 的hadoop的hadoop 0 2017-05- 05 19點28 HDFS:/// outputfiles/sample_directory
-rw-R - R-- 1級的hadoop的hadoop 68507436 2017年5月5日19時55 HDFS:///outputfiles/sample_output.txt

我希望通過單個命令將gzip格式的abc_output.txt和sample_directory從HDFS複製到S3上。我不希望這些文件在S3上合併。

我的S3存儲應包含以下內容: abc_output.txt.gzip sample_directory.gzip

我試過如下:

S3-DIST-CP --s3Endpoint = s3.amazonaws.com - -src = hdfs:/// outputfiles/--dest = s3:// bucket-name/outputfiles/--outputCodec = gzip

但是,這會將所有文件和文件夾從源複製到目標。

通過參照 Deduce the HDFS path at runtime on EMR,我也嘗試了下面的命令:

S3-DIST-CP --s3Endpoint = s3.amazonaws.com --src = HDFS:/// outputfiles/--dest = S3 :// bucket-name/outputfiles/--srcPattern =。* abc_output.txt。 sample_directory。 --outputCodec = gzip,但失敗。

回答

1

S3DistCp支持兩個選項,用於指定如何將源數據複製到目標。 --srcPattern --groupBy http://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html

的文檔上可以做些什麼不言自明。其餘......不能完成。

使用srcPattern,您可以編寫與您的源文件相匹配的RegEx。 s3distcp將簡單地將這些匹配的文件分別複製到目標中。

例如:--srcPattern='.*(txt|sample_folder).*'將複製其txt擴展&它會在目的地複製其名稱sample_folder到目的地源文件夾中的文件創建匹配目錄中的所有文件

http://regexr.com/3ftn0 (您可以根據正則表達式的設計您的要求。)

如果您應用--outputCodec=gzip選項除--srcPattern之外,單個匹配的文件將相應地壓縮。它們不會被整體壓縮。如果你需要將所有匹配的文件壓縮到一個文件中(沒有連接它的內容),那麼你將分別運行s3-dist-cp和一個壓縮命令。

如果要將文件abc_output.txt和sample_directory中的所有文件連接成單個文件並以gzip格式進行壓縮,則需要使用--groupBy。對於使用groupby,匹配的正則表達式模式應該是類似的,你需要在你的正則表達式中有一個括號,表明文件應該如何分組,所有與括號語句匹配的項目被合併成一個輸出文件。

例如:

--groupBy='.*(file|noname).*[0-9].*' --outputCodec=gz 

http://regexr.com/3ftn9 將串連所有匹配的文件內容,並創建一個.GZ文件

相關問題