36

Amazon ドキュメント http://aws.amazon.com/dynamodb/で、Elastic Map Reduce を使用して dynamodb テーブルをバックアップできることが提案されています。
これがどのように機能するかについては一般的に理解していますが、できませんでしたこれに関するガイドやチュートリアルを見つけてください。

私の質問は、dynamodb バックアップを (EMR を使用して) 自動化するにはどうすればよいですか?

これまでのところ、dynamodb からデータを読み取る map 関数と S3 に書き込む reduce を使用して「ストリーミング」ジョブを作成する必要があると思います。これらは Python (または Java または他のいくつかの言語) で記述できると思います。 .

コメント、説明、コード サンプル、修正を歓迎します。

4

9 に答える 9

38

dynamodb から S3 へのバックアップ用の既製のテンプレートを使用した AWS Data Pipeline の導入により、最も簡単な方法は、Data Pipeline [リンク]で バックアップをスケジュールすることです。

特別なニーズがある場合 (データ変換、非常に細かい制御など)、@greg による回答を検討してください。

于 2013-02-04T15:19:11.277 に答える
14

MapReduce と DynamoDB を操作するための優れたガイドがいくつかあります。私は先日これをフォローし、S3へのデータのエクスポートをかなり簡単に行いました. 最善の策は、バックアップ タスクを実行するハイブ スクリプトを作成し、それを S3 バケットに保存してから、言語用の AWS API を使用して新しい EMR ジョブ フローを実用的にスピンアップし、バックアップを完了することだと思います。これを cron ジョブとして設定できます。

Dynamo から S3 にデータをエクスポートするハイブ スクリプトの例:

CREATE EXTERNAL TABLE my_table_dynamodb (
    company_id string
    ,id string
    ,name string
    ,city string
    ,state string
    ,postal_code string)
 STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
 TBLPROPERTIES ("dynamodb.table.name"="my_table","dynamodb.column.mapping" = "id:id,name:name,city:city,state:state,postal_code:postal_code");

CREATE EXTERNAL TABLE my_table_s3 (
    ,id string
    ,name string
    ,city string
    ,state string
    ,postal_code string)
 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 LOCATION 's3://yourBucket/backup_path/dynamo/my_table';

 INSERT OVERWRITE TABLE my_table_s3
 SELECT * from my_table_dynamodb;

新しい EMR ジョブ フローをスピンアップする PHP スクリプトの例を次に示します。

$emr = new AmazonEMR();

$response = $emr->run_job_flow(
            'My Test Job',
            array(
                "TerminationProtected" => "false",
                "HadoopVersion" => "0.20.205",
                "Ec2KeyName" => "my-key",
                "KeepJobFlowAliveWhenNoSteps" => "false",
                "InstanceGroups" => array(
                    array(
                        "Name" => "Master Instance Group",
                        "Market" => "ON_DEMAND",
                        "InstanceType" => "m1.small",
                        "InstanceCount" => 1,
                        "InstanceRole" => "MASTER",
                    ),
                    array(
                        "Name" => "Core Instance Group",
                        "Market" => "ON_DEMAND",
                        "InstanceType" => "m1.small",
                        "InstanceCount" => 1,
                        "InstanceRole" => "CORE",
                    ),
                ),
            ),
            array(
                "Name" => "My Test Job",
                "AmiVersion" => "latest",
                "Steps" => array(
                    array(
                        "HadoopJarStep" => array(
                            "Args" => array(
                                "s3://us-east-1.elasticmapreduce/libs/hive/hive-script",
                                "--base-path",
                                "s3://us-east-1.elasticmapreduce/libs/hive/",
                                "--install-hive",
                                "--hive-versions",
                                "0.7.1.3",
                            ),
                            "Jar" => "s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar",
                        ),
                        "Name" => "Setup Hive",
                        "ActionOnFailure" => "TERMINATE_JOB_FLOW",
                    ),
                    array(
                        "HadoopJarStep" => array(
                            "Args" => array(
                                "s3://us-east-1.elasticmapreduce/libs/hive/hive-script",
                                "--base-path",
                                "s3://us-east-1.elasticmapreduce/libs/hive/",
                                "--hive-versions",
                                "0.7.1.3",
                                "--run-hive-script",
                                "--args",
                                "-f",
                                "s3n://myBucket/hive_scripts/hive_script.hql",
                                "-d",
                                "INPUT=Var_Value1",
                                "-d",
                                "LIB=Var_Value2",
                                "-d",
                                "OUTPUT=Var_Value3",
                            ),
                            "Jar" => "s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar",
                        ),
                        "Name" => "Run Hive Script",
                        "ActionOnFailure" => "CANCEL_AND_WAIT",
                    ),
                ),
                "LogUri" => "s3n://myBucket/logs",
            )
        );

}
于 2012-11-30T17:21:32.327 に答える
3

Python ベース ( botoを使用) のこの便利なdynamodumpツールを使用して、テーブルを JSON ファイルにダンプできます。そして、S3にアップロードしますs3cmd

于 2014-04-15T06:59:27.537 に答える
1

dynamodb-backup ラムダ関数が非常に役立つことがわかりました。セットアップに 5 分かかり、Cloudwatch スケジュール イベントを使用するように簡単に構成できます (npm installただし、最初に実行することを忘れないでください)。

また、Data Pipeline (月額約 40 ドル) から来る私にとってははるかに安く、費用は月額約 1.5 セント (どちらも S3 ストレージなし) と見積もっています。デフォルトでは、すべての DynamoDB テーブルを一度にバックアップすることに注意してください。これは、コード内で簡単に調整できます。

唯一欠けている部分は、関数が失敗した場合に通知されることです。これは、Data Pipeline で実行できました。

于 2016-12-03T10:25:51.650 に答える