【问题标题】:Multiple source files for s3distcps3distcp 的多个源文件
【发布时间】:2014-10-09 07:58:21
【问题描述】:

有没有办法使用 s3distcp 将文件列表从 S3 复制到 hdfs 而不是完整的文件夹?这是 srcPattern 无法工作的时候。

我在一个 s3 文件夹中有多个文件,它们都具有不同的名称。我只想将特定文件复制到 hdfs 目录。我没有找到任何方法来指定 s3distcp 的多个源文件路径。

我目前使用的解决方法是告诉 srcPattern 中的所有文件名

hadoop jar s3distcp.jar
    --src s3n://bucket/src_folder/
    --dest hdfs:///test/output/
    --srcPattern '.*somefile.*|.*anotherone.*'

当文件数量太多时,这个东西可以工作吗?大概一万左右?

【问题讨论】:

    标签: hadoop amazon-web-services amazon-s3 hdfs distcp


    【解决方案1】:

    hadoop distcp 应该可以解决您的问题。 我们可以使用 distcp 将数据从 s3 复制到 hdfs。

    并且它还支持通配符,我们可以在命令中提供多个源路径。

    http://hadoop.apache.org/docs/r1.2.1/distcp.html

    浏览此特定网址中的使用部分

    示例: 假设您在 test1 文件夹内的 s3 存储桶(test-bucket)中有以下文件。

    abc.txt
    abd.txt
    defg.txt
    

    在 test2 文件夹中你有

    hijk.txt
    hjikl.txt
    xyz.txt
    

    你的 hdfs 路径是hdfs://localhost.localdomain:9000/user/test/

    然后distcp命令针对特定模式如下。

    hadoop distcp s3n://test-bucket/test1/ab*.txt \ s3n://test-bucket/test2/hi*.txt hdfs://localhost.localdomain:9000/user/test/
    

    【讨论】:

    • 问题是,我需要使用s3distcp的--compressionCodec选项,distcp没有这个选项,所以我不能使用distcp。
    【解决方案2】:

    是的,你可以。使用您需要的所有文件创建一个清单文件,并使用提到的 --copyFromManifest 选项here

    【讨论】:

    • 你的意思是我应该把所有文件名(S3 路径)都写到清单上吗?
    • 是的。如果您想要一个清单文件的示例,只需使用 --outputManifest 选项运行 s3distcp,它将生成它复制的所有文件的清单文件。
    • 我已经通过生成我想要的 50k 文件的列表(以清单格式)来尝试这个,但在这种情况下,不清楚在所需的“--src”参数中使用什么。跨度>
    • S3Distcp 只会检查它是否是有效路径(存在于 hdfs\s3 上),但如果您提供清单,它将忽略它。
    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    相关资源
    最近更新 更多