通过AWS Data管道将json文件导入DynamoDB

时间:2016-04-20 10:45:35

标签: amazon-web-services amazon-s3 amazon-dynamodb amazon-data-pipeline

我试图找出如何创建可以从S3获取json文件并将其导入DynamoDB表的AWS数据管道。我能够创建一些实现此目的的Java代码,但我想通过数据管道来实现。我可以看到有从DynamoDB导出到S3并导入备份的模板,但我很难弄清楚如何导入普通的json文件。

1 个答案:

答案 0 :(得分:1)

在文档中,您将找到从DynamoDb导入和导出数据的示例(http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-importexport-ddb.html

以下是文档中描述的内容:

  

创建管道

     

打开AWS Data Pipeline控制台      

您看到的第一个屏幕取决于您是否创建了一个   当前地区的管道。

     

如果您尚未在此区域中创建管道,则会显示控制台   介绍性的屏幕。选择立即开始。

     

如果您已在此区域中创建了管道,则为控制台   显示一个列出该区域管道的页面。选择   创建新管道。

     

在“名称”中,输入管道的名称。

     

(可选)在“说明”中,输入管道的说明。

     

对于Source,选择使用模板构建,然后选择   以下模板:从S3导入DynamoDB备份数据。

     

在“参数”下,将“输入S3”文件夹设置为   s3:// elasticmapreduce / samples / Store / ProductCatalog,这是一个示例   数据源,并将DynamoDB表名设置为表的名称。

     

在“计划”下,选择管道激活。

     

在管道配置下,保持启用日志记录。选择文件夹   在S3位置下的日志图标,选择您的一个桶或   文件夹,然后选择选择。

     

如果您愿意,可以改为禁用日志记录。

     

在“安全/访问”下,将IAM角色设置为“默认”。

     

单击“在Architect中编辑”。

     

接下来,配置AWS Data的Amazon SNS通知操作   管道根据活动的结果执行。

     

配置成功和失败操作

     

在右侧窗格中,单击“活动”。

     

从“添加可选字段”中,选择“成功”。

     

从新添加的On Success中,选择Create new:Action。

     

从添加可选字段,选择失败。

     

从新添加的On Fail中,选择Create new:Action。

     

在右侧窗格中,单击“其他”。

     

对于DefaultAction1,请执行以下操作:

     

将名称更改为SuccessSnsAlarm。

     

从类型中,选择SnsAlarm。

     

在Topic Arn中,输入您创建的主题的ARN。

     

输入主题和消息。

     

对于DefaultAction2,请执行以下操作:

     

将名称更改为FailureSnsAlarm。

     

从类型中,选择SnsAlarm。

     

在Topic Arn中,输入您创建的主题的ARN。

     

输入主题和消息。

public github网站提供了一些使用DynamoDB(https://github.com/awslabs/data-pipeline-samples)的示例。这是一个管道定义的例子:

{
    "objects": [
        {
            "occurrences": "1",
            "period": "1 Day",
            "name": "RunOnce",
            "id": "DefaultSchedule",
            "type": "Schedule",
            "startAt": "FIRST_ACTIVATION_DATE_TIME",
        "maxActiveInstances" : "1"
        },
        {
            "failureAndRerunMode": "CASCADE",
            "schedule": {
                "ref": "DefaultSchedule"
            },
            "resourceRole": "DataPipelineDefaultResourceRole",
            "role": "DataPipelineDefaultRole",
            "pipelineLogUri": "s3://",
            "scheduleType": "cron",
            "name": "Default",
            "id": "Default"
        },
        {
            "maximumRetries": "2",
            "name": "TableBackupActivity",
            "step": "s3://dynamodb-emr-us-east-1/emr-ddb-storage-handler/2.1.0/emr-ddb-2.1.0.jar,org.apache.hadoop.dynamodb.tools.DynamoDbExport,#{myOutputS3Loc}/#{format(@scheduledStartTime, 'YYYY-MM-dd-HH-mm-ss')},#{myDDBTableName},#{myDDBReadThroughputRatio}",
            "id": "TableBackupActivity",
            "runsOn": {
                "ref": "EmrClusterForBackup"
            },
            "type": "EmrActivity"
        },
        {
            "bootstrapAction": "s3://elasticmapreduce/bootstrap-actions/configure-hadoop, --yarn-key-value, yarn.nodemanager.resource.memory-mb=12800,--yarn-key-value,yarn.scheduler.minimum-allocation-mb=256,--mapred-key-value,mapreduce.map.memory.mb=500,--mapred-key-value,mapreduce.map.java.opts=-Xmx400M,--mapred-key-value,mapreduce.job.reduce.slowstart.completedmaps=1,--mapred-key-value,mapreduce.map.speculative=false",
            "name": "EmrClusterForBackup",
            "amiVersion": "3.8.0",
            "id": "EmrClusterForBackup",
            "type": "EmrCluster",
            "masterInstanceType": "m1.medium",
            "coreInstanceType": "#{myInstanceType}",
            "coreInstanceCount": "#{myInstanceCount}",
        "terminateAfter" : "12 hours"
        }
    ],
    "parameters": [
        {
            "description": "OutputS3folder",
            "id": "myOutputS3Loc",
            "type": "AWS::S3::ObjectKey"
        },
        {
            "default": "0.2",
            "watermark": "Valuebetween0.1-1.0",
            "description": "DynamoDB Read Throughput Ratio",
            "id": "myDDBReadThroughputRatio",
            "type": "Double"
        },
        {
            "description": "DynamoDB Table Name",
            "id": "myDDBTableName",
            "type": "String"
        },
        {
            "description": "Instance Type",
            "id": "myInstanceType",
            "watermark" : "Use m1.medium if Read Capacity Units for the job <= 900. Else use m3.xlarge",
            "type": "String",
            "default": "m3.xlarge"
        },
        {
            "description": "Instance Count",
        "watermark" : "(Read Capacity Units / 300) for m1.medium if RCU <= 900. Else (RCU / 1500) for m3.xlarge",
            "id": "myInstanceCount",
            "type": "Integer",
            "default": "1"
        },
    {
        "description" : "Burst IOPs",
        "watermark"   : "Add IOPS to the DDB table by this percent for the duration of the export job",
            "id"          : "myBurstIOPS",
            "type"     :    "Double",
            "default"     : "0.0"
    }
    ]
}