Spark:写入DynamoDB,写入容量有限

时间:2018-05-18 07:08:31

标签: apache-spark amazon-dynamodb throttling

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

是否可以通过将分区减少为1然后执行foreachPartition()

来实现

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

请提出其他处理方式。

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

2 个答案:

答案 0 :(得分:1)

Bucket scheduler

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

DynamoDB重试

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

答案 1 :(得分:0)

我们为Spark创建了DynamoDB自定义数据源:

https://github.com/audienceproject/spark-dynamodb

它具有许多优雅的功能:

  • 具有延迟评估的分布式并行扫描
  • 通过速率限制所配置的表/索引容量的目标分数来进行吞吐量控制
  • 满足您需求的架构发现
  • 动态推理
  • 案例分类的统计分析
  • 列和过滤器下推
  • 全球二级索引支持
  • 写支持

您绝对可以使用吞吐量控制功能来实现您提到的有限的写容量。如果您可以检查一下并提供反馈,我们将非常乐意。