我想问一下,我正在使用AWS中的数据管道来完成一项处理任务,但是我一直无法让它开始工作。
基本上,我有两个代表两个MySQL数据库的数据节点,这些数据应该定期从其中提取,并放置在一个S3桶中。这个复制活动很好地选择了每天添加的每一行,比如今天-1天。
但是,包含作为CSV收集的数据的桶应该成为EMR活动的输入,EMR活动将处理这些文件并聚合信息。问题是,我不知道如何删除或移动已处理的文件到不同的桶,所以我不必每天处理所有文件。
为了澄清,我正在寻找一种从管道中移动或删除S3桶中已经处理的文件的方法。我能这么做吗?还有其他方法,我只能根据命名约定或其他方式处理EMR活动中的一些文件吗?
发布于 2014-12-23 19:19:12
更好的是,创建一个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-10-25 00:13:25
1)创建一个脚本,该脚本接受输入路径,然后使用hadoop -rmr s3path删除文件。2)将脚本上传到s3
在emr中,使用预步骤- 1) hadoop,-copyToLocal s3://scriptname。2) chmod + 3)运行脚本
差不多就是这样。
发布于 2014-10-29 23:23:03
另一种不使用EMR的方法是在一个小的s3cmd实例中通过ShellCommandActivity安装EC2工具,然后您可以使用管道中的s3cmd以任何您想要的方式操作S3回购。
这种方法的一个棘手部分是通过配置文件安全地配置s3cmd (基本上是传递访问密钥和秘密),因为您不能仅仅将ssh放到EC2实例中并在管道中交互地使用's3cmd -配置‘。
为此,您可以使用'cat‘在ShellCommandActivity中创建一个配置文件。例如:
cat <<EOT >> s3.cfg
blah
blah
blah
EOT然后在每次调用s3cmd时使用'-c‘选项附加配置文件,如下所示:
s3cmd -c s3.cfg ls听起来很复杂,但很管用。
https://stackoverflow.com/questions/26514404
复制相似问题