8

我有一类计算似乎很自然地采用了图形结构。该图远非线性,因为有多个输入以及扇出的节点和需要其他几个节点结果的节点。在所有这些计算中,也可能有几个接收器。但是,不存在任何周期。输入节点被更新(不一定一次一个),我让它们的值流过(此时纯粹是概念性的)图。随着输入的变化,节点保持状态,并且计算必须相对于输入按顺序运行。

由于我必须非常频繁地编写此类计算并且我不愿意每次都编写临时代码,因此我尝试编写一个小型库,以便通过为各种顶点编写类来轻松地将此类计算拼凑在一起。然而,我的代码相当不优雅,并且没有利用这些计算的并行结构。虽然每个顶点通常都是轻量级的,但计算可能会变得非常复杂和“宽泛”。为了使问题更加复杂,这些计算的输入在循环中非常频繁地更新。幸运的是,这些问题的规模足够小,我可以在单个节点上处理它们。

有没有人处理过类似的事情?你会推荐什么想法/方法/工具?

4

1 回答 1

2

Apache Storm:分布式硬件上的可靠、实时流处理

这听起来像是 Apache Storm(开源)完美解决的问题:http: //storm.apache.org/

Apache Storm 是关于实时流计算的,它一次处理一个元组(数据点)。Storm 保证每个元组至少被处理一次。使用 Storm Trident,您可以进一步抽象 Storm 并获得完全一次的语义。

Apache Storm 是一个免费的开源分布式实时计算系统。Storm 可以轻松可靠地处理无限制的数据流,实时处理就像 Hadoop 进行批处理一样。

我和我的公司已经使用 Apache Storm 多年,它是最成熟的大数据技术之一。大数据技术是以水平分布的方式(在廉价商品硬件上)运行的技术。

API 和文档

主要 API 用于 Java,但也有 Ruby、Python、Javascript、Perl 的适配器。但是,您实际上可以使用任何语言:http ://storm.apache.org/about/multi-language.html

文档很好(尽管 JavaDoc 可以使用更多细节):http ://storm.apache.org/documentation.html

基本理念 - Spout 和 Bolts(= 图形节点)

来自 Apache Storm 的 Spout 和 Bolts

Storm 有 Spout,您可以从中将数据读入所谓的拓扑。拓扑是您描述的此图。当新的元组进入 spout 时,它们会通过拓扑发送。每个节点都是风暴螺栓之一。

用例

Storm 有很多用例:实时分析、在线机器学习、连续计算、分布式 RPC、ETL 等等。Storm 速度很快:基准测试显示每个节点每秒处理超过一百万个元组。它具有可扩展性、容错性,保证您的数据将得到处理,并且易于设置和操作。

于 2015-11-27T08:55:31.030 回答