[翻译]Strom Tutorial

    本文只节选翻译storm Tutorial,之后会有讲demo的blog。如有错误,请不吝斧正。

Storm 组件

      Storm集群表面上与hadoop集群类似。在hadoop集群上,你可以跑 mapreduce job,而在storm集群上你可以跑各种topology。但其实 mapreduce job 和 topology,他们是非常不一样的——其中最主要的差别就是,一个Mapreduce job 可以运行结束,然后一个topology会一直处理信息直到你kill它。

      在一个Storm集群有两种节点:master node 和 worker nodes。Master node 运行着一个守护进程,叫做"Nimbus",这非常类似于hadoop 1.0时代的 JobTracker。Nimbus负责分发code,分配task给node,和监控。

      每个worker node运行着一个守护进程,叫做"Supervisor"。Supervisor监听那些分配给当前node的任务,启动和终止worker  processes(worker process处理那些Nimbus分配给它需要处理的任务)。而每个worker process执行一部分的topolgy;一个执行中的topology包含了很多worker processes执行在集群中。

    [翻译]Strom Tutorial_第1张图片

      Nimbus和 Supervisors之间的协作是通过Zookeeper集群完成的。另外,Nimbus 和 Supervisor是 快速失败 和 无状态化(TODO understand),而所有的状态是保存在Zookeeper或者本地磁盘。换而言之,你可以用 kill -9 来杀死 Nimbus 或者 Supervisors,而它们会马上变回好像什么都没发生过一样。这些设计致使Storm 集群非常稳定。(但愿如此,马上要用到项目中了......)

Topology

     在Storm上做实时计算,你需要创建 "Topology"。在Topology中的每个node涵盖 逻辑处理, nodes间数据传递依赖等等。

        执行一个Topology非常简单。首先, 你需要打包你全部的代码和依赖到一个jar,然后,你可以执行接下来的命令:

storm jar all-my-code.jar backtype.storm.MyTopology arg1 arg2

       这命令会执行类backtype.storm.MyTopology,并带入外部参数 arg1和arg2(给main函数用)。而这个类的main方法会定义topology,并提交给Nimbus。Storm jar会负责连接Nimbus,并上传这个jar。

      由于topology的结构定义是Thrift(facebook 写的一个夸语言调用框架)结构,同时Nimbus也是也是一个Thrift服务,所以你能创建和提交任何语言写的topology。

Streams

    在Storm里最抽象的是 "stream"。Stream是一个无边界且序列化的tuples。Storm提供了原语来把一个stream转化成另一个新的stream,且这种转化是分布式的,可靠的。下图就是Stream的写照。

     Storm提供的这种原语是 spouts 和 bolts。Spouts 和 bolts 都有接口,你需要实现来执行你的应用逻辑。

     Spout是stream的来源。举个栗子,一个spout可能读取tuples从Kestrel队列中,并且发射这些数据以流的形式。或者说,一个spout会连接Twitter的API 来发射数据流。(对于Storm来说,Spout就是源数据的抓取者,负责为整个流式计算提供源源不断的数据流。)

     Bolt则是stream的消费者,做一些数据处理,同时也可能发射新的数据流。混合复杂的流转化,需要多个步骤,多个bolts。Bolts能做任何事情,像执行functions,过滤tuples,数据流聚合,数据流join,与数据库间的协作 等等。(对于Storm来说,Bolt是数据流的处理者,可以有多个,负责真正业务逻辑上的聚合计算等等。)

     Spouts和Bolts间的网络传输被打包进一个 topology,然后你交于一个Storm集群去执行。当一个spout或bolt发射一个tuple到流里时, 它会发射这个tuple到所有的抓取这个流的bolt中。(需要注意的是,如果多个处理相同逻辑业务的bolt在发生数据聚合时,bolt的聚合结果未必是最终结果,这个和多个reducer计算Top one的情况是一样的。)

[翻译]Strom Tutorial_第2张图片

     在Storm里每个node执行是并行的。在你的topology里,你能指定node的并行度(比如 5),然后Storm会产生与其相当数量的Thread在集群中执行。

     一个Topology会一直执行下去的,或者你kill了它。Storm也会自动地重分配那些失败了task。当然,Storm也会保证没有任何的数据丢失,甚至机器下线和数据删除(TODO 有待深究原理)

总结

    翻译到这里,大致明白Storm是什么了,之后会详细描述Storm的测试demo,及遇到的错误。项目中需要结合Kafka使用,学习Continue...

你可能感兴趣的:(storm,bolt,spout,tutorial)