2015-03-30 106 views
5

我有一個Pig腳本(使用稍微修改的MultiStorage)來轉換某些數據。運行腳本後,我對HDFS的格式如下數據:使用S3DistCp從HDFS傳輸到S3時刪除目錄級別

/tmp/data/identifier1/indentifier1-0,0001 
/tmp/data/identifier1/indentifier1-0,0002 
/tmp/data/identifier2/indentifier2-0,0001 
/tmp/data/identifier3/indentifier3-0,0001 

我試圖用S3DistCp將這些文件複製到S3。我正在使用--groupBy .*(identifier[0-9]).*選項來根據標識符合並文件。組合起作用,但是當複製到S3時,文件夾也被複制。結束輸出是:

/s3bucket/identifier1/identifier1 
/s3bucket/identifier2/identifier2 
/s3bucket/identifier3/identifier3 

有沒有辦法複製這些文件沒有第一個文件夾?理想情況下,我在S3輸出會是什麼樣子:

/s3bucket/identifier1 
/s3bucket/identifier2 
/s3bucket/identifier3 

我考慮的另一個解決方案是使用HDFS命令複製到S3前拉這些文件他們的目錄。這是一個合理的解決方案?

謝謝!

+0

你可以發佈你的命令嗎? – 2015-03-31 04:48:27

+0

假設你的意思是通過s3distcp命令,這裏是傳遞給EMR步驟的參數:'--s3Endpoint s3.amazonaws.com --src hdfs:/// tmp/data/--dest s3:// output --groupBy 。* /(標識符)。*' – NolanDC 2015-03-31 13:20:37

+1

此時s3distcp不能壓扁這些目錄。請訪問https://forums.aws.amazon.com/thread.jspa?messageID=479023񴼯獲取功能請求。 – ChristopherB 2015-04-01 02:58:54

回答

3

我到達時的解決方案是使用distcp使用s3distcp之前把這些文件出的目錄:

hadoop distcp -update /tmp/data/** /tmp/grouped 

然後,我改變了s3distcp腳本從/tmp/grouped數據移動到我的S3桶。

+1

我試過這個解決方案,但是這個副本對於它會導致重複的投訴出現了錯誤。這是因爲我在不同的子目錄中有相同名稱的文件。有沒有簡單的方法來解決這個問題? – fblundun 2016-05-12 12:34:25

0

s3distcp之前使用distcp確實很貴。另一個選項是創建一個包含所有文件的清單文件,並將其路徑指定爲s3distcp。在這個清單中,您可以定義每個文件的「基本名稱」。如果您需要清單文件的示例,請在任何文件夾--outputManifest上運行s3distcp。 可以找到更多信息here