Ali*_*Ali 31 backup amazon-s3 elastic-map-reduce amazon-dynamodb
在亚马逊文档 http://aws.amazon.com/dynamodb/以及其他地方已经建议你可以使用Elastic Map Reduce备份你的dynamodb表,
我对这如何工作有一个大致的了解,但我不能找到任何指南或教程,
所以我的问题是如何自动化dynamodb备份(使用EMR)?
到目前为止,我认为我需要使用map函数创建一个"流"作业,该函数从dynamodb读取数据,并将reduce写入S3,我相信这些可以用Python(或java或其他几种语言)编写.
任何评论,澄清,代码示例,更正都表示赞赏.
gre*_*reg 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;
Run Code Online (Sandbox Code Playgroud)
以下是一个PHP脚本示例,它将启动新的EMR作业流程:
$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",
)
);
}
Run Code Online (Sandbox Code Playgroud)
Abh*_*han 10
随着DynamoDB Streams和Lambda的引入 - 您应该能够对DynamoDB数据进行备份和增量备份.
您可以将DynamoDB Stream与Lambda函数关联,以自动触发每次数据更新的代码(即:数据到另一个商店,如S3)
您可以使用lambda函数与DynamoDb进行增量备份:
https://github.com/PageUpPeopleOrg/dynamodb-replicator
我已经详细解释了如何使用DynamoDB Streams,Lambda和S3版本的存储桶在我的博客上为DynamoDb中的数据创建增量备份:
https://www.abhayachauhan.com/category/aws/dynamodb/dynamodb-backups
编辑:
截至2017年12月,DynamoDB发布了On Demand Backups/Restores.这允许您进行备份并将它们本地存储在DynamoDB中.它们可以恢复到新表.这里提供了详细的演练,包括安排它们的代码:
https://www.abhayachauhan.com/2017/12/dynamodb-scheduling-on-demand-backups
HTH
AWS Data Pipeline成本很高,并且管理模板化流程的复杂性无法与CLI命令的简单性相提并论,您可以对CLI命令进行更改并按计划运行(使用cron
,Teamcity或您选择的CI工具)
亚马逊提倡数据管道,因为他们从中获利。我要说的是,只有拥有非常大的数据库(> 3GB)才有意义,因为性能的提高将证明它是合理的。
对于中小型数据库(1GB或更少),我建议您使用许多可用工具之一,以下所有三个工具都可以从命令行处理备份和还原过程:
aws s3 cp
请记住,由于带宽/延迟问题,从EC2实例来看,这些问题始终比本地网络性能更好。
归档时间: |
|
查看次数: |
37991 次 |
最近记录: |