Hadoop,Mahout实时处理替代方案
我打算在我的项目中使用hadoop作为“计算集群”。然而,然后我读到Hadoop没有用于实时系统,因为与工作启动相关的开销。我正在寻找可以以这种方式使用的解决方案 - 可以轻松地扩展到多台计算机但不需要太多输入数据的作业。更重要的是,我想使用机器学习工作,例如实时使用在神经网络之前创建的。
我可以将哪些库/技术用于此目的?
我打算在我的项目中使用hadoop作为“计算集群”。然而,然后我读到Hadoop没有用于实时系统,因为与工作启动相关的开销。我正在寻找可以以这种方式使用的解决方案 - 可以轻松地扩展到多台计算机但不需要太多输入数据的作业。更重要的是,我想使用机器学习工作,例如实时使用在神经网络之前创建的。
我可以将哪些库/技术用于此目的?
你是对的,Hadoop是为批处理类型处理而设计的。
阅读这个问题,我虽然是关于Storm框架最近由Twitter开源的,它可以被认为是“用于实时处理的Hadoop”。
Storm使得在计算机集群上编写和扩展复杂的实时计算变得容易,从而可以像Hadoop对批处理所做的那样进行实时处理。Storm 保证每条消息都将得到处理。而且速度很快 — 您可以使用一个小集群每秒处理数百万条消息。最重要的是,您可以使用任何编程语言编写 Storm 拓扑。
(来自:InfoQ帖子)
但是,我还没有使用它,因此我在实践中真的不能说太多。
Twitter 工程博客文章:http://engineering.twitter.com/2011/08/storm-is-coming-more-details-and-plans.html
Github:https://github.com/nathanmarz/storm
鉴于您希望在de“秒”区域进行实时响应,我建议使用如下方法:
设置批处理模型以尽可能多地进行预计算。从本质上讲,尝试做一些不依赖于“最后一秒”数据的事情。在这里,您可以使用常规的Hadoop / Mahout设置,每天或(如果需要)每小时甚至15分钟运行这些批处理。
使用实时系统执行无法预先计算的最后几件事。为此,您应该考虑使用提到的s4或最近宣布的Twitter风暴。
有时,非常简单,将预先计算的值全部存储在内存中,然后简单地执行最后一次聚合/过滤/排序/...内存中的步骤。如果你能做到这一点,你就可以真正扩展,因为每个节点都可以完全独立于所有其他节点运行。
也许为您的实时组件提供NoSQL后端会有所帮助。有很多可用的:mongodb,redis,riak,cassandra,hbase,couchdb,...
这完全取决于您的实际应用。