2015-03-30 102 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