使用 S3DistCp 从 HDFS 传输到 S3 时删除目录级别
Remove directory level when transferring from HDFS to S3 using S3DistCp
我有一个 Pig 脚本(使用稍微修改过的 MultiStorage)来转换一些数据。脚本运行后,我在 HDFS 上有以下格式的数据:
/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
我考虑过的另一个解决方案是在复制到 S3 之前使用 HDFS 命令将这些文件从它们的目录中拉出。这是一个合理的解决方案吗?
谢谢!
我找到的解决方案是在使用 s3distcp
:
之前使用 distcp
将这些文件从目录中取出
hadoop distcp -update /tmp/data/** /tmp/grouped
然后,我更改了 s3distcp
脚本以将数据从 /tmp/grouped
移动到我的 S3 存储桶中。
在s3distcp
之前使用distcp
真的很贵。另一种选择是创建一个包含所有文件的清单文件,并将其路径提供给 s3distcp
。在此清单中,您可以定义每个文件的 "base name"。如果您需要一个清单文件的示例,只需 运行 s3distcp
在任何带有参数 --outputManifest
的文件夹上。
可以找到更多信息 here
我有一个 Pig 脚本(使用稍微修改过的 MultiStorage)来转换一些数据。脚本运行后,我在 HDFS 上有以下格式的数据:
/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
我考虑过的另一个解决方案是在复制到 S3 之前使用 HDFS 命令将这些文件从它们的目录中拉出。这是一个合理的解决方案吗?
谢谢!
我找到的解决方案是在使用 s3distcp
:
distcp
将这些文件从目录中取出
hadoop distcp -update /tmp/data/** /tmp/grouped
然后,我更改了 s3distcp
脚本以将数据从 /tmp/grouped
移动到我的 S3 存储桶中。
在s3distcp
之前使用distcp
真的很贵。另一种选择是创建一个包含所有文件的清单文件,并将其路径提供给 s3distcp
。在此清单中,您可以定义每个文件的 "base name"。如果您需要一个清单文件的示例,只需 运行 s3distcp
在任何带有参数 --outputManifest
的文件夹上。
可以找到更多信息 here