推ter Storm 开源实时Hadoop简介

admin 13年前
     推ter 将 Storm 正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在    <a href="/misc/goto?guid=4958192105624174542">GitHub</a> 上,遵循    <a href="/misc/goto?guid=4958192106364846143">Eclipse Public License 1.0</a>。Storm 是由 BackType 开发的实时处理系统,BackType 现在已在 推ter 麾下。GitHub 上的最新版本是    <a href="/misc/goto?guid=4958192107109700485">Storm 0.5.2</a>,基本是用 Clojure 写的。    <p> Storm 为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。Storm 也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式 RPC”,以并行的方式运行昂贵的运算。Storm 的主工程师 Nathan Marz 表示:</p>    <blockquote>     Storm 可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm 之于实时处理,就好比 Hadoop 之于批处理。Storm 保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。    </blockquote>    <p> Storm 的主要特点如下:</p>    <ol>     <li>简单的编程模型。类似于 MapReduce 降低了并行批处理复杂性,Storm 降低了进行实时处理的复杂性。</li>     <li>可以使用各种编程语言。你可以在 Storm 之上使用各种编程语言。默认支持 Clojure、Java、Ruby 和 Python。要增加对其他语言的支持,只需实现一个简单的 Storm 通信协议即可。</li>     <li>容错性。Storm 会管理工作进程和节点的故障。</li>     <li>水平扩展。计算是在多个线程、进程和服务器之间并行进行的。</li>     <li>可靠的消息处理。Storm 保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。</li>     <li>快速。系统的设计保证了消息能得到快速的处理,使用ØMQ 作为其底层消息队列。</li>     <li>本地模式。Storm 有一个“本地模式”,可以在处理过程中完全模拟 Storm 集群。这让你可以快速进行开发和单元测试。</li>    </ol>    <p> Storm 集群由一个主节点和多个工作节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每个工作节点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。Nimbus 和 Supervisor 都能快速失败,而且是无状态的,这样一来它们就变得十分健壮,两者的协调工作是由 <a href="/misc/goto?guid=4958192107847702038">Apache ZooKeeper</a> 来完成的。</p>    <p> Storm 的术语包括 Stream、Spout、Bolt、Task、Worker、Stream Grouping 和 Topology。Stream 是被处理的数据。Sprout 是数据源。Bolt 处理数据。Task 是运行于 Spout 或 Bolt 中的线程。Worker 是运行这些线程的进程。Stream Grouping 规定了 Bolt 接收什么东西作为输入数据。数据可以随机分配(术语为 Shuffle),或者根据字段值分配(术语为 Fields),或者广播(术语为 All),或者总是发给一个 Task(术语为 Global),也可以不关心该数据(术语为 None),或者由自定义逻辑来决定(术语为 Direct)。Topology 是由 Stream Grouping 连接起来的 Spout 和 Bolt 节点网络。在 <a href="/misc/goto?guid=4958192108580075658">Storm Concepts</a> 页面里对这些术语有更详细的描述。</p>    <p> 可以和 Storm 相提并论的系统有 <a href="/misc/goto?guid=4958192109333178531">Esper</a>、<a href="/misc/goto?guid=4958192110068530522">Streambase</a>、<a href="/misc/goto?guid=4958192110810733470">HStreaming</a> 和 <a href="/misc/goto?guid=4958192111565161909">Yahoo S4</a>。其中和 Storm 最接近的就是 S4。两者最大的区别在于 Storm 会保证消息得到处理。这些系统中有的拥有内建数据存储层,这是 Storm 所没有的,如果需要持久化,可以使用一个类似于 Cassandra 或 Riak 这样的外部数据库。</p>    <p> 入门的最佳途径是阅读 GitHub 上的官方<a href="/misc/goto?guid=4958192112297817697">《Storm Tutorial》</a>。其中讨论了多种 Storm 概念和抽象,提供了范例代码以便你可以运行一个 Storm Topology。开发过程中,可以用本地模式来运行 Storm,这样就能在本地开发,在进程中测试 Topology。一切就绪后,以远程模式运行 Storm,提交用于在集群中运行的 Topology。Maven 用户可以使用 clojars.org 提供的 Storm 依赖,地址是 http://clojars.org/repo。</p>    <p> 要运行 Storm 集群,你需要 <a href="/misc/goto?guid=4958192107847702038">Apache Zookeeper</a>、<a href="/misc/goto?guid=4958192113719026559">ØMQ</a>、<a href="/misc/goto?guid=4958192114455419783">JZMQ</a>、Java 6 和 Python 2.6.6。ZooKeeper 用于管理集群中的不同组件,ØMQ 是内部消息系统,JZMQ 是ØMQ 的 Java Binding。有个名为 <a href="/misc/goto?guid=4958192115212264156">storm-deploy</a> 的子项目,可以在 AWS 上一键部署 Storm 集群。关于详细的步骤,可以阅读 Storm Wiki 上的<a href="/misc/goto?guid=4958192115955125429">《Setting up a Storm cluster》</a>。</p>    <p> 欲了解 Storm 的更多信息,请访问官方 <a href="/misc/goto?guid=4958192116705126919">Storm Wiki</a>。你也可以加入 <a href="/misc/goto?guid=4958192117442188897">Storm 邮件列表</a>和 freenode 上的 Storm IRC(#storm-user)。</p>    <p> <strong>查看英文原文:</strong><a href="/misc/goto?guid=4958192118177033351">推ter Storm: Open Source Real-time Hadoop</a><br />       来自: <a id="link_source2" href="/misc/goto?guid=4958192118917621285" target="_blank">InfoQ</a></p>