storm初识印象

来源:互联网 发布:clean my mac 怎么样 编辑:程序博客网 时间:2024/05/01 15:43

分布式、高容错 、实时、计算系统、流数据处理、分布式RPC

Topology:拓扑图。Topology里面的每个处理节点都包含处理逻辑。而节点之间的连接则表示数据流动的方向。不会主动休息,除非你暴力把他停掉

spout:喷口,流的源头,从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,之后发送到Stream中。Spout是一个主动的角色,在接口内部有个nextTuple函数,Storm框架会不停的调用该函数

bolt:螺栓,处理输入的Stream,并产生新的输出Stream。可以执行过滤、函数操作、Join、操作数据库等操作,是一个被动的角色,其接口中有一个execute(Tuple input)方法,在接收到消息之后会调用此函数,用户可以在此方法中执行自己的处理逻辑

stream:没有边界的tuple(元组)序列

Nimbus:老板(我想要怎么样)(提交任务,分配集群任务,监控集群状态)

zookeeper:总管 (协调各个小领导)(接收nimbus分配给supervisor的任务,协调者,存放公有数据如心跳信息,集群状态和配置信息)

Supervisor:工作节点的分管(小领导)(接收任务,管理worker)

worker:真正干活的进程(劳苦大众)(运行具体处理逻辑的进程)

Nimbus和Supervisor之间的所有协调工作都是通过一个Zookeeper集群来完成。并且,nimbus进程和supervisor都是快速失败(fail-fast)和无状态的。所有的状态要么在Zookeeper里面, 要么在本地磁盘上。这也就意味着你可以用kill -9来杀死nimbus和supervisor进程, 然后再重启它们,它们可以继续工作, 就好像什么都没有发生过似的。这个设计使得storm不可思议的稳定。

每台supervisor运行若干worker进程

每个worker进程运行若干executor线程

每个executor线程运行这若干相同的task



Stream grouping:流分组策略,告诉topology如何在两个组件之间发送tuple,定义“路由选择” 机制,决定走哪条路


实例:

  1. 单词计数:
  2. TopologyBuilder builder =newTopologyBuilder();

  1.    builder.setSpout(1,newRandomSentenceSpout(),5);
  1. builder.setBolt(2,newSplitSentence(),8).shuffleGrouping(1);
  1. builder.setBolt(3,newWordCount(),12).fieldsGrouping(2,newFields("word"));


  1. spout提交任务:
  2. Config conf =newConfig();
  3. conf.setDebug(true);
  4. conf.setNumWorkers(2);

  5. LocalCluster cluster =newLocalCluster();
  6. cluster.submitTopology("test", conf, builder.createTopology());
  7. Utils.sleep(10000);
  8. cluster.killTopology("test");
  9. cluster.shutdown();




0 0
原创粉丝点击