1

Data Node> S3BackupLocation> CompressionをGZIPに設定して、AWSデータパイプラインを使用してDynamoDBテーブルをエクスポートしました。私は.gz拡張で圧縮出力を期待していましたが、拡張子のない非圧縮出力を得ました。gzip形式でのDynamoDBのエクスポート

Further readingは、圧縮フィールドが「Amazon Redshiftでのみ使用可能で、CopyActivityでS3DataNodeを使用する場合にのみサポートされている」ことを示しています。

DynamoDBテーブルのgzipバックアップをS3に取得するにはどうすればよいですか?すべてのファイルをダウンロードし、gzipしてアップロードする必要がありますか? CopyActivityでパイプラインを動作させる方法はありますか?より良いアプローチがありますか?

私は、エクスポートにHiveを使用して実験していますが、まだ出力で書式設定権を取得する方法が見つかりませんでした。 EMRジョブが別のソースからのデータと一緒にそれを読むことができるように、それは以下のフォーマットと一致する必要があります。

{"col1":{"n":"596487.0550532"},"col2":{"s":"xxxx-xxxx-xxxx"},"col3":{"s":"xxxx-xxxx-xxxx"}} 
{"col1":{"n":"234573.7390354"},"col2":{"s":"xxxx-xxxx-xxxx"},"col3":{"s":"xxxx-xxxxx-xx"}} 
{"col2":{"s":"xxxx-xxxx-xxxx"},"col1":{"n":"6765424.7390354"},"col3":{"s":"xxxx-xxxxx-xx"}} 

答えて

2

私もこれを行う方法を探していました。基本的な要求であり、基本データパイプラインワークフローの一部ではないことに私は驚いています。

1)は、その後、ローカルS3、GZIPからダウンロードするAWSのカップルCLIコマンド(S3 cpは、GZIP)を起動するためにShellCommandActivityを使用して再:

調査と実験の日後、私は2つのメカニズムを発見しました - s3にアップロードする。

{ 
    "name": "CliActivity", 
    "id": "CliActivity", 
    "runsOn": { 
     "ref": "Ec2Instance" 
    }, 
    "type": "ShellCommandActivity", 
    "command": "(sudo yum -y update aws-cli) && (#{myCopyS3ToLocal}) && (#{myGzip}) && (#{myCopyLocalToS3})" 
}, 

"values": { 
    "myCopyS3ToLocal": "aws s3 cp s3://your-bucket/your-folders/ --recursive", 
    "myGzip": "for file in /tmp/random-date/*; do gzip \"$file\"; done", 
    "myCopyLocalToS3": "aws s3 cp /tmp/random-date s3://your-bucket/your-folders-gz/ --recursive" 
} 

2)次に、EMRクラスタがS3DistCp(S3-DIST-CP)を実行することを利用し、データパイプラインを作成し、別EMRクラスタを作成します。ここに関連する部分です。それらの二つの間

{ 
    "name": "CliActivity", 
    "id": "CliActivity", 
    "runsOn": { 
     "ref": "Ec2Instance" 
    }, 
    "type": "ShellCommandActivity", 
    "command": "(sudo yum -y update aws-cli) && (#{myAWSCLICmd})" 
}, 

"values": { 
    "myAWSCLICmd": "aws emr add-steps --cluster-id j-XXXXYYYYZZZZ --region us-east-1 --steps Name=\"S3DistCp command runner\",Jar=\"command-runner.jar\",Args=[\"s3-dist-cp\",\"--s3Endpoint=s3.amazonaws.com\",\"--src=s3://your-bucket/your-folders/\",\"--dest=s3://your-bucket/your-folders-gz/\",\"--outputCodec=gz\"]" 
} 

s3distcpが自動的にソースS3のファイルを削除することができますので、私は2番目に好きです。ただし、別のEMRクラスタを実行する必要があります(コストが高くなります)。または、#1に追加ステップを追加して削除を実行することもできます。あなたはパラメータ化したい場合は

また、あなたは#{フォーマット(@ scheduledStartTime、「YYYY-MM-dd_hh.mm」)}のようなものを利用することができるように直接値をインライン化する必要があるかもしれません。

関連する問題