从EMR直接将数据写入DynamoDB

0

【以下的问题经过翻译处理】 一位客户研究了将数据直接从 EMR 写入 DynamoDB 的方法,遇到一个问题:为了运行 DynamoDBStorageHandler,他们必须更改 hive 引擎以使用 MR 而不是 TEZ。虽然我们可以做到这一点,但这确实意味着我们需要运行两个 EMR 集群。我们能否确认他们的理解是正确的,他们认为就像他们在测试TEZ时他们看到了失败但在使用MR时却没有看到失败。我们能否找出是否有更好的方法来执行此操作而不需要 2 个 EMR 集群。

profile picture
专家
已提问 5 个月前8 查看次数
1 回答
0

【以下的回答经过翻译处理】 emr-dynamodb-connector (https://github.com/awslabs/emr-dynamodb-connector) 的 DynamoDBStorageHandler 在 EMR 使用 Hive/Spark/MR 与 DynamoDB 表进行交互时被使用。它根据 dynamodb.throughput.write.percent 配置以及其他参数确定一个 maxParallelTasks 属性。maxParallelTasks 属性是 MR 引擎的一个函数(因为在实现连接器时,默认情况下是在 Hive on MR 上),因此如果选择 Tez/Spark 引擎用于 Hive,连接器的写入和功能不会改变,但是 IOPS 将不再受到控制/估算,写入速率主要取决于输入大小和 EMR 集群容量。这可能导致对表进行限流(不确定是否这些是您指的错误)

只要Hive on MR可用,目前建议在写入时使用MR引擎并在运行时设置它(在与DynamoDB交互的任何Hive脚本之前添加“set hive.execution.engine=mr;”)。这不需要2个EMR集群,直到客户有一天开始使用EMR的更高版本(现在所有EMR版本都有MR 引擎,因此如果继续使用这些版本,则不会出现问题)时,遇到EMR 中的 Hive 不再包含 MR 引擎。

PS:即使是Hive on MR与DynamoDB进行交互,EMR集群容量也可能是决定写入速度的次要因素,但最大值始终会根据设置的dynamodb.throughput.write.percent配置来进行限制。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则