长时间运行的ETL过程 - 后台作业,Spark,Hadoop

时间:2017-08-16 11:21:57

标签: ruby hadoop apache-spark background-process

我在应用程序中有一个场景;

  1. 必须从多个来源(超过10个)
  2. 加载数据
  3. 主要来源是HTTP / JSON Web服务和一些FTP
  4. 必须处理这些数据并放入中央数据库(Postgresql)
  5. 当前的实现是在Ruby中使用Background作业完成的。但我看到其中有以下问题;

    1. 内存使用率非常高
    2. 乔布斯有时会没有任何错误报告
    3. 水平缩放设置很棘手
    4. 在这种情况下,Spark或Hadoop可以提供哪些帮助或更好的选择。

      请详细说明一些好的理由。

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

      1. 如果我们扩展正在运行的作业的并发性,那么也会增加DB服务器的负载。我曾经读过,即使在数据库方面,Spark和Hadoop也会面临如此沉重的负担。
      2. 我们无法运行更多后台进程,然后运行CPU的物理内核(由ruby和sidekiq社区推荐)
      3. Ruby中的并发实际上依赖于GIL,而GIL实际上并不支持真正的并发。因此,每个作业都可以获取单个中央数据源,如果它进入IO调用,则源将被锁定。
      4. 以上所有观点都被认为是Hadoop& amp;的内置架构的一部分。火花。所以我在思考这些工具。

1 个答案:

答案 0 :(得分:0)

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

它们是用于解决像您这样的问题的可视化工具。并有一个免费版本的可下载表单SourceForge(只需解压缩并按下spoon.bat按钮)。

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

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

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