从 MapReduce 中的 Mapper 访问数据库

DB access from a Mapper in MapReduce

我计划开发我正在开发的下一代分析系统,我考虑使用 MapReduce/Stream-Processing 平台之一来实现它,例如 FlinkSpark Streaming

为了进行分析,映射器必须具有数据库访问权限。

所以我最担心的是当mapper并行时,连接池中的连接都将被使用,并且可能有一个mapper无法访问数据库。

我该如何处理? 这是我需要关心的事情吗?

正如您所指出的,pull-style 策略效率低下 and/or 复杂。

您从数据库中提取 meta-data 的策略将取决于 meta-data 的数量和 meta-data 更改的频率。无论哪种方式,从需要时获取 meta-data 转向在 meta-data 更改时接收更新,可能是一个很好的方法。

一些想法:

  • 定期将 meta-data 转储到 file/s 分布式文件系统
  • 将 meta-data 更新流式传输到 write-time 处的管道以保留 in-memory 缓存 up-to-date
  • 使用单独的机制来获取 meta-data,例如 Akka Actor/s 轮询更改

这将取决于 trade-offs 你能够为给定的 use-case。

如果数据库交互是不可避免的,我想知道 map-reduce 风格的框架是否是解决您问题的最佳方法。但是框架应该重试任何失败的任务。