我打算在我的项目中使用 hadoop 作为“计算集群”。但是后来我读到 Hadoop 不适用于实时系统,因为与作业开始相关的开销。我正在寻找可以以这种方式使用的解决方案 - 可以轻松扩展到多台机器但不需要太多输入数据的作业。更重要的是,我想使用机器学习工作,例如实时使用在神经网络之前创建的。
我可以为此目的使用哪些库/技术?
我打算在我的项目中使用 hadoop 作为“计算集群”。但是后来我读到 Hadoop 不适用于实时系统,因为与作业开始相关的开销。我正在寻找可以以这种方式使用的解决方案 - 可以轻松扩展到多台机器但不需要太多输入数据的作业。更重要的是,我想使用机器学习工作,例如实时使用在神经网络之前创建的。
我可以为此目的使用哪些库/技术?
你是对的,Hadoop 是为批处理类型而设计的。
阅读这个问题,我想到了最近由 Twitter 开源的 Storm 框架,它可以被认为是“用于实时处理的 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
鉴于您希望在“秒”区域内获得实时响应,我建议您这样做:
尽可能建立一个批处理模型进行预计算。基本上尝试做不依赖于“最后一秒”数据的所有事情。在这里,您可以使用常规的 Hadoop/Mahout 设置并每天或(如果需要)每小时甚至 15 分钟运行这些批处理。
使用实时系统来完成最后几件无法预先计算的事情。为此,您应该考虑使用提到的 s4 或最近宣布的twitterstorm。
有时,将预先计算的值全部存储在内存中并简单地在内存中执行最后的聚合/过滤/排序/...步骤是值得的。如果你能做到这一点,你就可以真正扩展,因为每个节点都可以完全独立于所有其他节点运行。
也许为您的实时组件配备 NoSQL 后端会有所帮助。有很多可用的:mongodb,redis,riak,cassandra,hbase,couchdb,...
这一切都取决于您的实际应用。
也试试S4,最初由 Yahoo! 发布 及其现在的 Apache 孵化器项目。它已经存在了一段时间,当我进行概念验证时,我发现它对一些基本的东西很有用。虽然没有广泛使用它。
您正在尝试做的将更适合 HPCC,因为它同时具有后端数据处理引擎(相当于 Hadoop)和前端实时数据交付引擎,从而消除了通过第三方增加复杂性的需要党的组成部分。HPCC 的一个好处是两个组件都使用相同的语言和编程范式进行编程。在以下网址查看它们: http: //hpccsystems.com