【问题标题】:delete s3 files from a pipeline AWS从管道 AWS 中删除 s3 文件
【发布时间】:2014-10-22 18:20:38
【问题描述】:

我想询问有关我尝试使用 AWS 中的数据管道完成的处理任务,但我无法让它工作。

基本上,我有 2 个数据节点,代表 2 个 MySQL 数据库,应该定期从中提取数据并放置在 S3 存储桶中。此复制活动运行良好,每天选择已添加的每一行,假设今天 - 1 天。

但是,包含作为 CSV 收集的数据的存储桶应成为 EMR 活动的输入,该活动将处理这些文件并汇总信息。问题是我不知道如何删除或移动已处理的文件到不同的存储桶,所以我不必每天处理所有文件。

为了澄清,我正在寻找一种方法来从管道中移动或删除 S3 存储桶中已处理的文件。我可以这样做吗?有没有其他方法我只能根据命名约定或其他方式处理 EMR 活动中的某些文件?

【问题讨论】:

    标签: amazon-web-services emr amazon-data-pipeline


    【解决方案1】:

    更好的是,创建一个 DataPipeline ShellCommandActivity 并使用 aws 命令行工具。

    用这两行创建一个脚本:

        sudo yum -y upgrade aws-cli 
        aws s3 rm $1 --recursive
    

    第一行确保您拥有最新的 aws 工具。

    第二个删除目录及其所有内容。 $1 是传递给脚本的参数。

    在您的 ShellCommandActivity 中:

        "scriptUri": "s3://myBucket/scripts/theScriptAbove.sh",
        "scriptArgument": "s3://myBucket/myDirectoryToBeDeleted"
    

    有关 aws s3 命​​令如何工作的详细信息位于:

        http://docs.aws.amazon.com/cli/latest/reference/s3/index.html
    

    【讨论】:

    • 谢谢!这正是我想要的。
    【解决方案2】:

    1) 创建一个接受输入路径的脚本,然后使用 hadoop fs -rmr s3path 删除文件。 2)上传脚本到s3

    在 emr 中使用 prestep - 1) hadoop fs -copyToLocal s3://scriptname 。 2) chmod +x 脚本名 3) 运行脚本

    差不多了。

    【讨论】:

      【解决方案3】:

      另一种不使用 EMR 的方法是通过 ShellCommandActivity 在小型 EC2 实例中安装 s3cmd 工具,然后您可以在管道中使用 s3cmd 以任何方式操作您的 S3 存储库。

      这种方法的一个棘手部分是通过配置文件安全地配置 s3cmd(基本上传递访问密钥和秘密),因为您不能只 ssh 进入 EC2 实例并在管道中交互地使用“s3cmd --configure” .

      为此,您可以使用“cat”在 ShellCommandActivity 中创建一个配置文件。例如:

      cat <<EOT >> s3.cfg
      blah
      blah
      blah
      EOT
      

      然后每次调用 s3cmd 时使用 '-c' 选项附加配置文件,如下所示:

      s3cmd -c s3.cfg ls
      

      听起来很复杂,但很有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-31
        • 1970-01-01
        • 2018-12-20
        • 1970-01-01
        • 2017-09-30
        • 2017-05-25
        • 2017-06-24
        • 1970-01-01
        相关资源
        最近更新 更多