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策略需要在修改一个代码,就下次再做了。本来不想上这么多图的,不过,不是说有图有真相嘛!哈哈~

  • 相关阅读:
    jeecms 强大的采集功能优化 转载 https://blog.csdn.net/jeff06143132/article/details/7099003
    JEECMS自定义标签开发步骤
    jeecms之全文检索
    jeecms怎么修改后台访问路径?
    jeecms 基本架构研究
    Java JNI初探
    《高效程序员的45个习惯》
    Java并发编程:Thread类的使用
    Thread详解
    JAVA多线程实现的四种方式
  • 原文地址:https://www.cnblogs.com/UUhome/p/4298755.html
Copyright © 2011-2022 走看看