我在应用程序中有一个场景;长时间运行ETL过程 - 后台作业,Spark,Hadoop
- 必须加载多个来源的数据(超过10个)
- 晴来源是HTTP/JSON Web服务和一些FTP
- 必须处理这些数据,并把到一个中央数据库(PostgreSQL系统)
当前实现是在Ruby中使用后台作业完成的。但我看到以下问题;
- 非常高的内存使用情况
- 乔布斯有时会卡住没有任何错误报告
- 水平扩展是棘手的设置
不会在这种情况下,任何方式Spark或Hadoop的帮助或更好选项。
请详细说明一下好的推理。
更新: 根据评论,我需要进一步阐述它。以下是我为什么认为Spark或Hadoop的要点。
- 如果我们扩展运行作业的并发性,那也会增加数据库服务器的负担。我曾读过,即使在数据库方面,Spark和Hadoop也面临如此沉重的负载。
- 我们不能运行更多的后台进程,然后CPU的物理内核(由ruby和sidekiq社区推荐)
- Ruby中的并发实际上依赖于GIL,实际上并不支持实际的并发。因此,每个作业都可以获取单个中央数据源,如果该数据源陷入IO调用中,则源将被锁定。
以上所有内容均被认为是Hadoop内置体系结构的一部分& Spark。所以我在考虑采用这些工具。
这是一个奇怪的问题。我在一个使用Ruby,Spark和Hadoop的地方工作,我可以告诉你他们在架构上不可以这样互换。无论基于hadoop的解决方案是否总体上适合您的情况,您提到的问题都可以通过适当架构的Ruby系统来解决。提供更多关于它架构如何和人们可以帮助你的细节。 –
@MarkThomas你基于应用场景的主要观点来对待这个问题。让我编辑这个问题来添加更多的想法。 –
您可能需要使用resque-retry插件尝试Resque。如果他们是小型工作,您可能还需要resque-multi-job-forks插件。 (如果真的需要,可以使用resque-kubernetes进行缩放) –