【问题标题】: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
听起来很复杂,但很有效。