zoukankan      html  css  js  c++  java
  • storm的八种Grouping策略

           在这里,将会提到storm的七种grouping策略,并且编码逐一实现。

          首先,需要一个集群(希望尽量模仿真实环境,故就不用本地模式了)。详细的安装方法大家可以查看本人的另外一篇博文:storm集群和zookeeper集群的部署过程

          OK。现在有三个节点。一个作为nimbus,两个作为supervisor。到这里先介绍一下storm逻辑上有两个component,一个是Spout,另一个是Bolt。stream由Spout发出,在不同的Bolt之间进行处理,在其中传递的是storm的基本处理单位:Tuple。由Spout发出一个一个Tuple,然后Bolt接收Tuple进行各种各样的处理。这一整个过程构成一个DAG。在storm里面叫做Topology。当使用远程模式向集群提交一个Topology之后,如果不kill掉的话,将会一直运行到。。。我也不知道尽头。。貌似没有尽头。

          好了,来看一个简单的Topology。将使用这个Topology来实现那几种Grouping策略。

          

          上图中spout的处理逻辑是将一句话发出给下一个Bolt,然后下一个Bolt做句子的单词分割,下一个做计数,最后的Bolt做汇总显示。这里可以有多个Bolt或者Spout进行并行处理。这是关于并行度的设置。

          好了,所谓的grouping策略就是在Spout与Bolt、Bolt与Bolt之间传递Tuple的方式。总共有七种方式:

          1)shuffleGrouping(随机分组)

          2)fieldsGrouping(按照字段分组,在这里即是同一个单词只能发送给一个Bolt)

          3)allGrouping(广播发送,即每一个Tuple,每一个Bolt都会收到)

          4)globalGrouping(全局分组,将Tuple分配到task id值最低的task里面)

          5)noneGrouping(随机分派)

          6)directGrouping(直接分组,指定Tuple与Bolt的对应发送关系)

          7)Local or shuffle Grouping

          8)customGrouping (自定义的Grouping)

          OK,下面逐个来试试!

          首先是使用shuffleGrouping策略。

          

          启动后所得的结果。

          

         可以看到如storm这个单词被随机分配到了两个counter里面,分别是h2和h3两个节点里面。可再做一次提交,又会看到不一样的结果。将与下面的fieldGrouping形成对比。

         

         

         然后换成fieldsGrouping。

         

        启动后的结果如图。图中wordcount2和wordcount3就是我两次提交的topology的名字。

         

         

        下面是两次提交的结果。可以看出,使用fieldsGrouping策略,被分配到每个wordcounterbolt的单词没有变化。

         

         

        下面是第二次提交的结果。

         

         

         再换成noneGrouping策略。

         

        提交集群运行。

         

        运行结果如图。noneGrouping和shuffleGrouping是基本一样的。都是随机的。

        

        

        替换成allGrouping策略。

       

       提交集群运行。

       

       运行结果如图。可以看到。两个bolt所接收到的单词是一样的,都是全部的单词。

       

       

       最后,替换成globalGrouping策略。

       

       提交集群运行。

       

       从上图可以看到,主要分配到了h3这个节点。从下面的结果得以验证。

       

       

       好了,就先做到这里吧!剩下的grouping策略需要在修改一个代码,就下次再做了。本来不想上这么多图的,不过,不是说有图有真相嘛!哈哈~

  • 相关阅读:
    WP7 操作XML文件
    C#和C/C++指针实现swap交换
    感受
    我学到了什么 我思考了什么.
    hdu 2768 Cat vs. Dog (最大独立)
    hdu 1960 Taxi Cab Scheme (最小覆盖)
    hdu 1528 Card Game Cheater (最小覆盖)
    hdu 4160 Dolls (最大独立)
    hdu 2458 Kindergarten (最大独立集)
    hdu 2119 Matrix (最小覆盖)
  • 原文地址:https://www.cnblogs.com/UUhome/p/4298755.html
Copyright © 2011-2022 走看看