当前位置: 首页 > 知识库问答 >
问题:

DynamoDB表复制通过数据管道产生不完整的重复

慕璞
2023-03-14

我有一个DynamoDB表是14.05GB,有140,000,000项。我试图使用数据管道克隆它(到同一区域),但当管道完成时,目标表只有大约160,000个项目,我等了6个小时才能查看项目计数。

我将每个表的吞吐量设置为256,管道需要大约20分钟才能完成。有没有可能导致管道只复制表的一部分?尺寸和物品数量是否有无形的限制?我已经尝试了3次,每次都有类似的结果,“完成”的目标表只包含90150k的140M项。

我还确保最大执行时间设置得非常高。

数据管道是快速复制Dynamo表的最简单方法吗?

谢谢

共有2个答案

水瀚漠
2023-03-14

利用AWS数据管道的实用性,可以从一个Dynamodb表复制到另一个Dynamodb表。下面是一个示例管道定义。

{
"objects": [
    {
        "startAt": "FIRST_ACTIVATION_DATE_TIME",
        "name": "DailySchedule",
        "id": "DailySchedule",
        "period": "1 day",
        "type": "Schedule",
        "occurrences": "1"
    },
    {
        "id": "Default",
        "name": "Default",
        "scheduleType": "CRON",
        "pipelineLogUri": "#{myS3LogsPath}",
        "schedule": {
            "ref": "DailySchedule"
        },
        "failureAndRerunMode": "CASCADE",
        "role": "DataPipelineDefaultRole",
        "resourceRole": "DataPipelineDefaultResourceRole"
    },
   {
        "id": "DDBSourceTable",
        "tableName": "#{myDDBSourceTableName}",
        "name": "DDBSourceTable",
        "type": "DynamoDBDataNode",
        "readThroughputPercent": "#{myDDBReadThroughputRatio}"
    },
    {
        "name": "S3TempLocation",
        "id": "S3TempLocation",
        "type": "S3DataNode",
        "directoryPath": "#{myTempS3Folder}/#{format(@scheduledStartTime, 'YYYY-MM-dd-HH-mm-ss')}"
    },
    {
        "id": "DDBDestinationTable",
        "tableName": "#{myDDBDestinationTableName}",
        "name": "DDBDestinationTable",
        "type": "DynamoDBDataNode",
        "writeThroughputPercent": "#{myDDBWriteThroughputRatio}"
    },
    {
        "id": "EmrClusterForBackup",
        "name": "EmrClusterForBackup",
        "releaseLabel": "emr-4.2.0",
        "masterInstanceType": "m3.xlarge",
        "coreInstanceType": "m3.xlarge",
        "coreInstanceCount": "1",
        "region": "#{myDDBSourceRegion}",
        "terminateAfter": "6 Hours",
        "type": "EmrCluster"
    },
    {
        "id": "EmrClusterForLoad",
        "name": "EmrClusterForLoad",
        "releaseLabel": "emr-4.2.0",
        "masterInstanceType": "m3.xlarge",
        "coreInstanceType": "m3.xlarge",
        "coreInstanceCount": "1",
        "region": "#{myDDBDestinationRegion}",
        "terminateAfter": "6 Hours",
        "type": "EmrCluster"
    },
    {
        "id": "TableLoadActivity",
        "name": "TableLoadActivity",
        "runsOn": {
            "ref": "EmrClusterForLoad"
        },
        "input": {
            "ref": "S3TempLocation"
        },
        "output": {
            "ref": "DDBDestinationTable"
        },
        "type": "EmrActivity",
        "maximumRetries": "2",
        "dependsOn": {
           "ref": "TableBackupActivity"
        },
        "resizeClusterBeforeRunning": "true",
        "step": [
            "s3://dynamodb-emr-#{myDDBDestinationRegion}/emr-ddb-storage-handler/2.1.0/emr-ddb-2.1.0.jar,org.apache.hadoop.dynamodb.tools.DynamoDbImport,#{input.directoryPath},#{output.tableName},#{output.writeThroughputPercent}"
        ]
    },
   {
        "id": "TableBackupActivity",
        "name": "TableBackupActivity",
        "input": {
            "ref": "DDBSourceTable"
        },
        "output": {
            "ref": "S3TempLocation"
        },
        "runsOn": {
            "ref": "EmrClusterForBackup"
        },
        "resizeClusterBeforeRunning": "true",
        "type": "EmrActivity",
        "maximumRetries": "2",
        "step": [
            "s3://dynamodb-emr-#{myDDBSourceRegion}/emr-ddb-storage-handler/2.1.0/emr-ddb-2.1.0.jar,org.apache.hadoop.dynamodb.tools.DynamoDbExport,#{output.directoryPath},#{input.tableName},#{input.readThroughputPercent}"
        ]
    },
    {
        "dependsOn": {
            "ref": "TableLoadActivity"
        },
        "name": "S3CleanupActivity",
        "id": "S3CleanupActivity",
        "input": {
            "ref": "S3TempLocation"
        },
        "runsOn": {
           "ref": "EmrClusterForBackup"
        },
        "type": "ShellCommandActivity",
        "command": "(sudo yum -y update aws-cli) && (aws s3 rm #{input.directoryPath} --recursive)"
    }
],
"parameters": [
    {
        "myComment": "This Parameter specifies the S3 logging path for the pipeline.  It is used by the 'Default' object to set the 'pipelineLogUri' value.",
        "id" : "myS3LogsPath",
        "type" : "AWS::S3::ObjectKey",
        "description" : "S3 path for pipeline logs."
    },
    {
        "id": "myDDBSourceTableName",
        "type": "String",
        "description": "Source DynamoDB table name"
    },
    {
        "id": "myDDBDestinationTableName",
        "type": "String",
        "description": "Target DynamoDB table name"
    },
    {
        "id": "myDDBWriteThroughputRatio",
        "type": "Double",
        "description": "DynamoDB write throughput ratio",
        "default": "0.25",
        "watermark": "Enter value between 0.1-1.0"
    },
    {
        "id": "myDDBSourceRegion",
        "type": "String",
        "description": "Region of the DynamoDB table",
        "default": "us-east-1",
        "watermark": "us-east-1"
    },
    {
        "id": "myDDBDestinationRegion",
        "type": "String",
        "description": "Region of the DynamoDB table",
        "default": "us-east-1",
        "watermark": "us-east-1"
    },
    {
        "id": "myDDBReadThroughputRatio",
        "type": "Double",
        "description": "DynamoDB read throughput ratio",
        "default": "0.25",
        "watermark": "Enter value between 0.1-1.0"
    },
    {
        "myComment": "Temporary S3 path to store the dynamodb backup csv files, backup files will be deleted after the copy completes",
        "id": "myTempS3Folder",
        "type": "AWS::S3::ObjectKey",
        "description": "Temporary S3 folder"
    }
]
}
燕烨
2023-03-14

亚马逊已经回复了我的机票,并确认这是数据管道中的一个已知问题(错误)。

他们向我推荐了这个Java程序https://github.com/awslabs/dynamodb-import-export-tool 首先将其导出到S3,然后将其导入回DynamoDB

 类似资料:
  • 我正在尝试使用数据管道将数据从dynamoDb导出到S3。我的表是按需配置的,包含10gb的数据。它将消耗多少rcu?有没有一种方法可以减少rcu的扩展,并最终增加传输时间?

  • 我的DynamoDB表有大约1亿(30GB)个项目,我为它配置了10k RCU。我正在使用数据管道作业导出数据。 将DataPipeline读取吞吐量比设置为0.9。 如何计算完成导出的时间(管道完成导出需要4个多小时) 我如何优化它,使导出在更短的时间内完成。 读取吞吐量比率如何与DynamoDB导出相关?

  • 我曾经使用pipeline.json.将数据从一个DynamoDB复制到另一个DynamoDB。当源表具有预配容量时,它就可以工作,如果目标设置为预配/按需设置也没关系。我希望我的两个表设置为按需容量。但当我使用相同的模板它不工作。我们有没有办法做到这一点,或者它还在开发中? 以下是我的原始功能脚本: 下面是当source DynamoDB表设置为On Demand capacity时数据管道执行

  • 本文向大家介绍C++生成不重复的随机整数,包括了C++生成不重复的随机整数的使用技巧和注意事项,需要的朋友参考一下 C++生成不重复的随机数,供大家参考,具体内容如下 给定正整数的范围[n,m],生成k个不重复的随机数字。 IDE是vs013。 运行结果: 这个程序可以用于班级内部按照学号进行随机抽签。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 注意:这个问题确实是Split pandas dataframe字符串条目复制到单独行的重复,但是此处提供的答案更通用,更有意义,因此,在所有方面,我选择不删除线程 我有一个具有以下格式的“数据集”: 我想通过复制每个id的所有值来规范化它: 我正在做的是应用split-apply-combine的使用原理,为每个组创建一个 我创建了一个列进行分组,该列仅对行中的id进行计数: 我复制

  • 我想创建一个使用时间戳作为范围键的表,以便轻松地按日期对数据进行排序。 纪元格式似乎是最容易使用的- 在javascript中,我使用的是新日期()。获取UTC时间。 我的问题是在DynamoDB中保存日期的更好的数据类型是什么,字符串还是数字? 在这里和这里找到了一些AWS的参考资料,它们说可以使用数字作为时间戳的类型,因为它是所有数字的类型,包括长的。 当我按日期查询时会有什么不同吗?我正在寻