Storm流分组介绍
        
        流分组是拓扑定义的一部分,每个Bolt指定应该接收哪个流作为输入。流分组定义了流/元组如何在Bolt的任务之间进行分发。在设计拓扑的时候需要定义数据如何在组件之间进行交换(流如何被Bolt消耗处理)。
    一个流分组指定每个Bolt消耗哪个流。一个节点可以发出多个数据流,流分组允许我们有选择的接收流进行消耗处理。
        
        Storm内置了7种流分组方式和一个自定义分组方式(由InputDeclarer接口定义)。InputDeclarer接口定义了不同的流分组方式。每当TopologyBuilder的setBolt方法被调用时就返回该对象,用于声明一个Bolt的输入流,以及这些流应
    该如何分组。InputDeclarer接口的完整定义代码如下:
        public interface InputDeclarer<T extends InputDeclarer> {
            //字段分组
            public T fieldsGrouping(String componentId, Fields fields);
            public T fieldsGrouping(String componentId, String streamId, Fields fields);

//全局分组
            public T globalGrouping(String componentId);
            public T globalGrouping(String componentId, String streamId);

//随机分组
            public T shuffleGrouping(String componentId);
            public T shuffleGrouping(String componentId, String streamId);

//本地或随机分组
            public T localOrShuffleGrouping(String componentId);
            public T localOrShuffleGrouping(String componentId, String streamId);

//无分组
            public T noneGrouping(String componentId);
            public T noneGrouping(String componentId, String streamId);

//广播分组
            public T allGrouping(String componentId);
            public T allGrouping(String componentId, String streamId);

//直接分组
            public T directGrouping(String componentId);
            public T directGrouping(String componentId, String streamId);

//自定义分组,通过实现CustomStreamGrouping接口可以实现自定义的流分组
            public T customGrouping(String componentId, CustomStreamGrouping grouping);
            public T customGrouping(String componentId, String streamId, CustomStreamGrouping grouping);

public T grouping(GlobalStreamId id, Grouping grouping);
        }
        从InputDeclarer接口中可以看出,流分组的方式主要有fieldsGrouping(字段分组)、globalGrouping(全局分组)、shuffleGrouping(随机分组)、localOrShuffleGrouping(本地或随机分组)、noneGrouping(无分组)、
    allGrouping(广播分组)、directGrouping(直接分组)、customGrouping(自定义分组)这8种不同的流分组方式。每个InputDeclarer实例可以有不止一个源,每个源可以使用不同的流分组方式来分组。
        1、随机分组
            随机分组(Shuffle Grouping)是最常用的流分组方式,它随机分发元组到Bolt上的任务,这样能保证每个任务得到相同数量的元组。随机分组执行原子操作,这是很重要的,例如数学运算。
        2、字段分组
            字段分组(Fields Grouping)是根据指定字段对流进行分组。例如在日志处理时通常会把Error、Warn等字段进行分组,具有相同Error、Warn的元组总是被分发到相同的任务;不同于前者的字段可能会被分发到不同的任务。
        字段分组是实现流连接、关联以及大量其他的用例的基础。在实现上字段分组使用取模散列来实现。
        3、广播分组
            广播分组(All Grouping)失智流分组发送到所有的Bolt的任务中。
        4、全局分组
            全局分组(Global Grouping)是指全部流都发送到Bolt的同一个任务中,具体一点是发送给ID最小的任务。
        5、无分组
            无分组(None Grouping)的应用场景是不关心流如何分组时则可以使用这种分组方式。目前这种分组和随机分组是一样的效果,有一点不同的是Storm会把这个Bolt放到Bolt订阅者的同一个线程中执行。
        6、直接分组
            直接分组(Direct Grouping)是一种特殊的分组。这种方式的流分组一维这由元组的生产者决定元组的消费者的接收元组的任务。直接分组只能在已经声明为直接流(Direct Stream)的流中使用,并且元组必须使用
        emitDirect方法来发射。Bolt通过TopologyContext对象或者OutputCollector类的emit方法的返回值可以获取到其消费者的任务ID列表(List<Integer>)。
        7、本地或随机分组
            如果目标Bolt在同一工作进程存在一个或多个任务,元组会随机分配给这些任务。否则该分组方式与随机分组方式是一样的效果。
        8、自定义分组
            自定义分组(Custome Grouping),通过实现CustomStreamGrouping接口可以实现自定义的流分组,接口定义如下:
            public interface CustomStreamGrouping extends Serializable {
                void prepare(WorkerTopologyContext context, GlobalStreamId stream, List<Integer> targetTasks);
                List<Integer> chooseTasks(int taskId, List<Object> values);
            }

Storm流分组介绍的更多相关文章

  1. Storm Grouping —— 流分组策略

    Storm Grouping: Shuffle Grouping :随机分组,尽量均匀分布到下游Bolt中 将流分组定义为混排.这种混排分组意味着来自Spout的输入将混排,或随机分发给此Bolt中的 ...

  2. 简单聊聊Storm的流分组策略

    简单聊聊Storm的流分组策略 首先我要强调的是,Storm的分组策略对结果有着直接的影响,不同的分组的结果一定是不一样的.其次,不同的分组策略对资源的利用也是有着非常大的不同,本文主要讲一讲loca ...

  3. storm 入门原理介绍

    1.hadoop有master与slave,Storm与之对应的节点是什么? 2.Storm控制节点上面运行一个后台程序被称之为什么? 3.Supervisor的作用是什么? 4.Topology与W ...

  4. (转发)storm 入门原理介绍

    1.hadoop有master与slave,Storm与之对应的节点是什么? 2.Storm控制节点上面运行一个后台程序被称之为什么?3.Supervisor的作用是什么?4.Topology与Wor ...

  5. storm 入门原理介绍_AboutYUN

    转自:http://www.aboutyun.com/thread-7394-1-1.html 了解Storm:http://www.aboutyun.com/thread-9547-1-2.html ...

  6. storm入门原理介绍

    转自:http://www.cnblogs.com/wuxiang/p/5629138.html 1.hadoop有master与slave,Storm与之对应的节点是什么?2.Storm控制节点上面 ...

  7. storm group 的介绍与使用

    一.stream group分组介绍 Stream 的分组分为随机分组.字段分组.全部分组.全局分组.无分组.直接分组,自定义分组 二.group的介绍 1.Shuffle grouping:通过tu ...

  8. 大数据开发实战:Storm流计算开发

    Storm是一个分布式.高容错.高可靠性的实时计算系统,它对于实时计算的意义相当于Hadoop对于批处理的意义.Hadoop提供了Map和Reduce原语.同样,Storm也对数据的实时处理提供了简单 ...

  9. storm 的分组策略深入理解(-)

    目录 storm的分组策略 根据实例来分析分组策略 common配置: Shuffle grouping shuffle grouping的实例代码 ShuffleGrouping 样例分析 Fiel ...

随机推荐

  1. nginx中时间的管理

    nginx出于性能考虑採用类似lib_event的方式,自己对时间进行了cache,用来降低对gettimeofday()的调用,由于一般来说server对时间的精度要求不是特别的高,只是假设须要比較 ...

  2. 【Android】无限滚动的HorizontalScrollView

    这是一个很简单的功能,作为新手,做一下笔记.也给其它有需要的人提供一个参考. 首先HorizontalScrollView都知道用途了.它可以实现类似“桌面程序”左右切换页的效果.一般情况下里面的页数 ...

  3. git pull 代码很慢的问题

    办公环境调整,之前开发机是和自己的电脑放同一网段内的,现在开发机放至到本地其他网段内,造成pull 代码很慢的问题,在网上查了一下 以下是原文,链接为 http://blog.sina.com.cn/ ...

  4. 外网访问自己的tomcat

    我们平常学习时经常会写一下javaweb程序,我们为了更能逼近现实,就想着自己的javaweb程序发布后,外网的同学能够访问我们的网站,难道我们去买空间,去买域名嘛,其实也没必要,我们只是学习,测试之 ...

  5. FFMPEG 视频旋转设置

    fmpeg -i inputfile.mp4 -vf "transpose=1" outputfile.mp4 0=90CounterCLockwise and Vertical ...

  6. AD域属性对照表

    查看文章 AD属性对照表(一)[AD域][属性] 2011年08月25日 星期四 19:36AD属性对照表家庭电话 :“常规”标签  姓 Sn                       Y 名 gi ...

  7. 配置CAS错误No Certificate file specified or invalid file format

    配置tomcat证书 keystore文件后启动一直报错:(tomcat版本:apache-tomcat-6.0.43) tomcat配置: <Connector port="8443 ...

  8. 你好,C++(26)如何与函数内部进行数据交换?5.1.3 函数参数的传递

    5.1.3  函数参数的传递 我们知道,函数是用来完成某个功能的相对独立的一段代码.函数在完成这个功能的时候,往往需要外部数据的支持,这时就需要在调用这个函数时向它传递所需要的数据它才能完成这个功能获 ...

  9. javascript中的screen对象

    screen对象通常包含下列属性(许多浏览器都加入了自己的属性): 1.availHeight :  窗口可以使用的屏幕的高度(以像素计)其中包括操作系统元素(如window工具栏)需要的空间. 2. ...

  10. web页面相关的一些常见可用字符介绍

    首先是一张图片,是一张一些字符以及想对应的HTML实体表示的对照图片.如下: 一.引号模样或内心的些字符 请选择该表格要呈现的字体: 字符以及HTML实体 描述以及说明 " " 这 ...