我打算在我的项目中使用hadoop作为“计算集群”。然而,我读到Hadoop并不打算用于实时系统,因为开销与工作相关。我正在寻找可以这种方式使用的解决方案 - 可以轻松扩展到多台机器但不需要太多输入数据的作业。更有甚者,我想使用机器学习工作,例如在神经网络之前实时创建。
我可以为此目的使用哪些库/技术?
答案 0 :(得分:10)
你是对的,Hadoop是专为批量处理而设计的。
阅读问题,我虽然最近关于最近由Twitter开源的Storm框架,可以将其视为“用于实时处理的Hadoop”。
Storm使得在一组计算机上编写和扩展复杂的实时计算变得容易,可以实时处理Hadoop为批处理所做的工作。 Storm保证每条消息都会被处理。而且速度很快 - 您可以使用小型群集每秒处理数百万条消息。最重要的是,您可以使用任何编程语言编写Storm拓扑。
(来自:InfoQ post)
但是,我还没有使用它,所以在实践中我真的不能说太多。
Twitter工程博客帖子:http://engineering.twitter.com/2011/08/storm-is-coming-more-details-and-plans.html
Github:https://github.com/nathanmarz/storm
答案 1 :(得分:4)
鉴于您希望在“秒”区域内进行实时响应,我推荐这样的事情:
尽可能设置批量处理模型以进行预先计算。基本上尝试做所有不依赖于“最后一秒”数据的事情。在这里,您可以使用常规的Hadoop / Mahout设置,每天或(如果需要)每小时甚至15分钟运行这些批次。
使用实时系统执行无法预先计算的最后几件事。 为此,您应该使用上面提到的s4或最近宣布的twitter storm来查看。
有时真的很简单并将预先计算好的值存储在内存中,只需在内存中执行最后一次聚合/过滤/排序/ ...步骤。如果你能做到这一点,你可以真正扩展,因为每个节点可以完全独立于其他节点运行。
也许为您的实时组件提供NoSQL后端有帮助。 有很多可用的:mongodb,redis,riak,cassandra,hbase,couchdb,......
这一切都取决于你的实际应用。
答案 2 :(得分:2)
另请尝试S4,最初由Yahoo!发布以及它现在的Apache Incubator项目。它已经存在了一段时间,当我做一个概念验证时,我发现它对一些基本的东西是好的。但是没有广泛使用它。
答案 3 :(得分:0)
您正在尝试做的更适合HPCC,因为它同时具有后端数据处理引擎(相当于Hadoop)和前端实时数据传输引擎,无需增加通过第三方组件的复杂性。 HPCC的一个好处是两个组件都使用相同的语言和编程范例进行编程。 请查看:http://hpccsystems.com