【问题标题】:Remove directory level when transferring from HDFS to S3 using S3DistCp使用 S3DistCp 从 HDFS 传输到 S3 时删除目录级别
【发布时间】:2015-06-04 02:28:44
【问题描述】:

我有一个 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

我考虑过的另一个解决方案是使用 HDFS 命令将这些文件从其目录中拉出,然后再复制到 S3。这是一个合理的解决方案吗?

谢谢!

【问题讨论】:

  • 你能发布你的命令吗?
  • 假设您的意思是 s3distcp 命令,这里是传递给 EMR 步骤的参数:--s3Endpoint s3.amazonaws.com --src hdfs:///tmp/data/ --dest s3://output --groupBy .*/(identifier).*
  • 此时 s3distcp 无法展平目录。在forums.aws.amazon.com/thread.jspa?messageID=479023&#479023 上获取功能请求。

标签: hadoop amazon-s3 apache-pig hdfs emr


【解决方案1】:

我找到的解决方案是使用distcp 将这些文件从目录中取出,然后再使用s3distcp

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

然后,我更改了 s3distcp 脚本以将数据从 /tmp/grouped 移动到我的 S3 存储桶中。

【讨论】:

  • 我尝试了这个解决方案,但副本出错,抱怨它would cause duplicates.。这是因为我在不同的子目录中有同名的文件。有没有简单的方法来解决这个问题?
【解决方案2】:

s3distcp 之前使用distcp 真的很昂贵。另一个选择是创建一个包含所有文件的清单文件,并将其路径指定为s3distcp。在此清单中,您可以定义每个文件的“基本名称”。如果您需要清单文件的示例,只需在带有参数--outputManifest 的任何文件夹上运行s3distcp。 更多信息可以找到here

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2015-04-07
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多