【问题标题】:Spark: Writing to DynamoDB, limited write capacitySpark:写入 DynamoDB,写入容量有限
【发布时间】:2018-10-28 13:28:19
【问题描述】:

我的用例是从 Spark 应用程序写入 DynamoDB。由于我对 DynamoDB 的写入容量有限,并且不想增加它的成本影响,我如何限制 Spark 应用程序以规定的速度写入?

这可以通过将分区减少到1然后执行foreachPartition()来实现吗?

我已经启用了自动缩放,但不想再增加它。

请提出其他处理方式。

编辑:这需要在 Spark 应用程序在多节点 EMR 集群上运行时实现。

【问题讨论】:

  • 在SQS中创建任务队列,让SQS慢慢更新DynamoDB。

标签: apache-spark amazon-dynamodb throttling


【解决方案1】:

桶调度程序

我这样做的方法是在您的 Spark 应用程序中创建一个token bucket scheduler。令牌桶模式是一种常见的设计,可确保应用程序不会违反 API 限制。我在非常相似的情况下成功地使用了这个设计。您可能会发现有人编写了一个可用于此目的的库。

DynamoDB 重试

另一个(不那么吸引人)选项是增加 DynamoDB 连接的重试次数。当您的写入由于超出吞吐量规定而未成功时,您基本上可以指示您的 DyanmoDB SDK 继续重试,只要您愿意。 this answer 中的详细信息。如果您想要一个“快速而肮脏”的解决方案,此选项可能会很有吸引力。

【讨论】:

  • 这是一个很好的方法,但在具有多个节点的集群的情况下,这是不可行的。有没有考虑到这个限制的解决方案?
  • 令牌桶可以扩展为在分布式系统中工作相对正常,只要你知道系统中有多少节点参与。如果您依赖 DynamoDB 来为您处理节流,那么它开箱即用。让您的客户端“无限期地”重试并让它崩溃
猜你喜欢
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 2016-06-14
  • 2020-10-06
  • 1970-01-01
相关资源
最近更新 更多