2017-08-16 72 views
0

我在应用程序中有一个场景;长时间运行ETL过程 - 后台作业,Spark,Hadoop

  1. 必须加载多个来源的数据(超过10个)
  2. 晴来源是HTTP/JSON Web服务和一些FTP
  3. 必须处理这些数据,并把到一个中央数据库(PostgreSQL系统)

当前实现是在Ruby中使用后台作业完成的。但我看到以下问题;

  1. 非常高的内存使用情况
  2. 乔布斯有时会卡住没有任何错误报告
  3. 水平扩展是棘手的设置

不会在这种情况下,任何方式Spark或Hadoop的帮助或更好选项。

请详细说明一下好的推理。

更新: 根据评论,我需要进一步阐述它。以下是我为什么认为Spark或Hadoop的要点。

  1. 如果我们扩展运行作业的并发性,那也会增加数据库服务器的负担。我曾读过,即使在数据库方面,Spark和Hadoop也面临如此沉重的负载。
  2. 我们不能运行更多的后台进程,然后CPU的物理内核(由ruby和sidekiq社区推荐)
  3. Ruby中的并发实际上依赖于GIL,实际上并不支持实际的并发。因此,每个作业都可以获取单个中央数据源,如果该数据源陷入IO调用中,则源将被锁定。

以上所有内容均被认为是Hadoop内置体系结构的一部分& Spark。所以我在考虑采用这些工具。

+1

这是一个奇怪的问题。我在一个使用Ruby,Spark和Hadoop的地方工作,我可以告诉你他们在架构上不可以这样互换。无论基于hadoop的解决方案是否总体上适合您的情况,您提到的问题都可以通过适当架构的Ruby系统来解决。提供更多关于它架构如何和人们可以帮助你的细节。 –

+0

@MarkThomas你基于应用场景的主要观点来对待这个问题。让我编辑这个问题来添加更多的想法。 –

+0

您可能需要使用resque-retry插件尝试Resque。如果他们是小型工作,您可能还需要resque-multi-job-forks插件。 (如果真的需要,可以使用resque-kubernetes进行缩放) –

回答

0

在我看来,我会尝试Pentaho Data Integrator(PDI)(或Talend)。

他们在那里设计可视化工具来解决像你这样的问题。并有一个免费的版本下载形式SourceForge(只需解压并按下spoon.bat按钮)。

他们可以从FTP和HTTP(等)中获取数据,解码JSON并编写像Postgres这样的数据库。 PDI有一个免费插件,可以开箱即用地运行Ruby代码,因此您可以节省启动开发时间。

PDI还有现成的Spark和Hadoop接口,所以如果你需要更多的解决方案,你可以在后期透明地实现你的hadoop/sparkle服务器。

PDI是为大量数据加载而构建的,可让您控制并发和远程服务器。