由于经常需要编写这种计算,我不想每次都写临时代码,因此我尝试编写一个小型库,通过为各个顶点编写类来轻松组合这些计算。但是,我的代码相当不优雅,也没有利用这些计算的并行结构。虽然每个顶点通常都很轻巧,但计算可以变得相当复杂和“宽”。更加复杂的是,这些计算的输入在循环中非常频繁地更新。幸运的是,这些问题规模很小,我可以在单个节点上处理它们。
是否有人遇到过类似的情况?您会推荐哪些思路/方法/工具?
由于经常需要编写这种计算,我不想每次都写临时代码,因此我尝试编写一个小型库,通过为各个顶点编写类来轻松组合这些计算。但是,我的代码相当不优雅,也没有利用这些计算的并行结构。虽然每个顶点通常都很轻巧,但计算可以变得相当复杂和“宽”。更加复杂的是,这些计算的输入在循环中非常频繁地更新。幸运的是,这些问题规模很小,我可以在单个节点上处理它们。
是否有人遇到过类似的情况?您会推荐哪些思路/方法/工具?
这听起来似乎是Apache Storm(开源)非常适合的问题:http://storm.apache.org/
Apache Storm 是关于实时流计算的,它一次处理单个元组(数据点)。Storm 保证每个元组至少被处理一次。使用 Storm Trident,您可以进一步抽象 Storm 并获得精确一次的语义。
Apache Storm 是一个免费且开源的分布式实时计算系统。Storm 可以轻松地可靠地处理无限制的数据流,为实时处理做了 Hadoop 所做的批处理。
我和我的公司已经与 Apache Storm 合作了几年,它是最成熟的大数据技术之一。大数据技术是以水平分布的方式运行的技术(在廉价的商品硬件上)。
主要 API 是针对 Java 的,但有 Ruby、Python、Javascript、Perl 的适配器。但实际上您可以使用任何语言:http://storm.apache.org/about/multi-language.html
文档很好(尽管 JavaDoc 可以使用更多细节):http://storm.apache.org/documentation.html
Storm 有 Spouts,您可以从中读取数据到所谓的拓扑结构中。拓扑结构即为您所描述的该图形。当新元组进入 Spouts 时,它们会通过拓扑结构发送。每个节点都是 Storm Bolts 中的一个。
Storm 有许多用例:实时分析、在线机器学习、连续计算、分布式 RPC、ETL 等。Storm 是快速的:基准测试将其定时为每个节点每秒处理一百万个元组。它是可伸缩的、容错的、保证您的数据将被处理,并且易于设置和操作。