2

AWS のデータ パイプラインを使用して完了しようとしている処理タスクについてお聞きしたいのですが、うまくいきません。

基本的に、2 つの MySQL データベースを表す 2 つのデータ ノードがあり、データは定期的に抽出され、S3 バケットに配置されることになっています。このコピー アクティビティは、追加されたすべての行を毎日選択して正常に動作しています。たとえば、今日 - 1 日です。

ただし、収集されたデータを CSV として含むバケットは、これらのファイルを処理して情報を集約する EMR アクティビティの入力になる必要があります。問題は、既に処理されたファイルを削除または別のバケットに移動する方法がわからないため、すべてのファイルを毎日処理する必要がないことです。

明確にするために、パイプラインから S3 バケット内の既に処理されたファイルを移動または削除する方法を探しています。それをしてもいいですか?命名規則などに基づいて、EMR アクティビティで一部のファイルのみを処理する方法はありますか?

4

3 に答える 3

6

さらに良いことに、DataPipeline ShellCommandActivity を作成し、aws コマンドライン ツールを使用します。

次の 2 行でスクリプトを作成します。

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

最初の行により、最新の aws ツールがあることが保証されます。

2 番目のものは、ディレクトリとそのすべての内容を削除します。$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 では、前段階 - 1) hadoop fs -copyToLocal s3://scriptname を使用します。2) chmod +x スクリプト名 3) スクリプトを実行

それはほとんどそれです。

于 2014-10-25T00:13:25.837 に答える
0

EMR を使用しない別のアプローチは、小さな EC2 インスタンスで ShellCommandActivity を介してs3cmdツールをインストールすることです。その後、パイプラインで s3cmd を使用して、S3 リポジトリを任意の方法で操作できます。

このアプローチのトリッキーな部分は、構成ファイルを介して安全に s3cmd を構成することです (基本的にはアクセス キーとシークレットを渡します)。これは、EC2 インスタンスに ssh してパイプラインで対話的に 's3cmd --configure' を使用することはできないためです。

これを行うには、'cat' を使用して ShellCommandActivity に構成ファイルを作成します。例えば:

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

次に、「-c」オプションを使用して、次のように s3cmd を呼び出すたびに構成ファイルを添付します。

s3cmd -c s3.cfg ls

複雑に聞こえますが、機能します。

于 2014-10-29T23:23:03.237 に答える