是否可以使用spark处理具有复杂依赖关系的复杂实体?

时间:2019-04-16 00:08:55

标签: scala apache-spark distributed-computing

考虑一个场景(对象和依赖项是Scala类):

有一组依赖关系,它们本身需要实例化大量数据(数据来自数据库)。 有一组具有复杂嵌套层次结构的对象,这些对象存储对这些依赖项的引用。

当前的工作流程包括:

  1. 从数据库加载依赖项数据并实例化它们 (以相互依赖性非常复杂的方式)。
  2. 加载对象 数据库中的数据并使用以前的实例化对象 加载的依赖项。
  3. 对一系列对象的运行操作,例如:

    a. Search with a complex predicate
    b. Transform
    c. Filter
    d. Save to the database
    e. Reload from the database
    

我们正在考虑在多台计算机上运行这些操作。一种选择是使用Spark,但尚不清楚如何正确地支持数据序列化以及分发/更新依赖项。

即使我们能够将对象中的逻辑与数据分离(使对象易于序列化),我们要在对象上运行的功能仍将依赖于上述复杂的依赖关系。

此外,至少在目前,我们还没有计划使用任何需要在机器之间进行数据混排的操作,而我们所需的基本上只是分片。

Spark看起来很适合这种情况吗?

  • 如果是,如何处理复杂的依赖关系?
  • 如果否,那么希望获得指向可以处理工作流的替代系统的任何指针。

1 个答案:

答案 0 :(得分:1)

我对“复杂的相互依赖性”的含义不甚了解,但是似乎如果您只需要分片,那么从火花中获取的内容就不会真正得到多少-只要运行多个队列,就可以运行一个队列来同步工作并将其需要处理的碎片分发给每个副本。

我们做了类似的事情,将pySpark jot转换为Kubernetes设置,其中队列保存了ID列表,然后有多个Pod(我们通过kubectl控制缩放)从该队列中读取,并获得了更好的性能和更简单的解决方案-参见https://kubernetes.io/docs/tasks/job/coarse-parallel-processing-work-queue/