2

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

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

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

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

4

3 回答 3

6

更好的是,创建一个 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
于 2014-12-23T19:19:12.577 回答
0

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

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

差不多就是这样。

于 2014-10-25T00:13:25.837 回答
0

另一种不使用 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

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

于 2014-10-29T23:23:03.237 回答