从 MapReduce 中的 Mapper 访问数据库
DB access from a Mapper in MapReduce
我计划开发我正在开发的下一代分析系统,我考虑使用 MapReduce
/Stream-Processing
平台之一来实现它,例如 Flink
、Spark 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 风格的框架是否是解决您问题的最佳方法。但是框架应该重试任何失败的任务。
我计划开发我正在开发的下一代分析系统,我考虑使用 MapReduce
/Stream-Processing
平台之一来实现它,例如 Flink
、Spark 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 风格的框架是否是解决您问题的最佳方法。但是框架应该重试任何失败的任务。