zoukankan      html  css  js  c++  java
  • Storm基本概念以及Topology的并发度

    Spouts,流的源头

    Spout是Storm里面特有的名词,Stream的源头,通常是从外部数据源读取tuples,并emit到topology

    Spout可以同时emit多个tupic stream,通过OutputFieldsDeclarer中的declareStream,method来定义

    Spout需要实现RichSpout端口,最重要的方法是nextTuple,storm会不断调用接口从spout中取数据,同时需要注意的是Spout分为reliable or unreliable两种

    对于reliable,还支持ack和fail方法

    Bolts,流的处理节点

    对于Bolt,用户可以定义任意的处理逻辑,最重要的方法是execute,输入为tuple,输出为emit 或多个tuples到OutoutCollector。

    Topologies,拓扑

    可以理解为mapreduce里面的job

    区别是,mrjob执行完会结束,而Topologies会一直存在,因为mr流动的是代码,而Storm流动的是数据

    Storm Topology是基于Thrifit结构,并且Nimtus是个Thrifit server。

    Stream grouping分类

    1Shuffle Grouping(最常用):随机分组,随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同

    Strom Topology的并发度

    概念:一个Topology可以包含一个或者多个worker(并行的跑在不同的machine上),所以worker process 就是执行一个topology的子集,并且worker只能对应于一个topology。

    一个worker包含一个或者多个executor,每个component(spout或bolt)至少对应一个executor,所以可以说executor执行一个compenent的子集,同时一个executor只能对应于一个component。

    task就是具体的处理逻辑对象,一个executor线程可以执行一个或者多个tasks,但是一般默认每个executor只执行一个task,所以我们往往认为task就是执行线程,其实不然

    task代表的是最大并发度,一个component的task数目是不会改变的,但是一个component的excutor数目数会发生变化的,当task数目大于executor数目时候,executor代表实际并发度

    Storm里面的数据结构tuple

    这几天一直在看storm,其中注意到了storm中主要的数据结构类型tuple,刚开始对这种数据还是很不理解,看几个程序之后,才豁然开朗,下面就主要介绍一些storm中最简单的、最基础的东西——tuple。

    storm中的数据首先是有spout收集,类似于一个消息源,spout的open()函数一般就是接收数据的地方,然后spout的 nextTuple()是发送(emit)tuple的地方。tuple到底是什么?感觉还是用英语来说比较容易理解吧,"A tuple is a named of values where each value can be any type."  tuple是一个类似于列表的东西,存储的每个元素叫做field(字段)。我们用getString(i)可以获得tuple的第i个字段。而其中的每个字段都可以任意类型的,也可以一个很长的字符串。我们可以用:

          String A = tuple.getString(0);
          long a= tuple.getLong(1);
    

            来得到我想要的数据,不过前提你是要知道你的tuple的组成。具体tuple是什么类型,完全取决于自己的程序,取决于spout中nextTuple()方法中emit发送的类型。

    参考资料:

    www.51studyit/html/notes/20140329/44.html

    www.51studyit/html/notes/20140329/45.html

    www.51studyit/html/notes/20140329/46.html

    www.51studyit/html/notes/20140329/47.html

    www.51studyit/html/notes/20140329/48.html

  • 相关阅读:
    51nod 1087 1 10 100 1000(找规律+递推+stl)
    51nod 1082 与7无关的数 (打表预处理)
    51 nod 1080 两个数的平方和
    1015 水仙花数(水题)
    51 nod 1003 阶乘后面0的数量
    51nod 1002 数塔取数问题
    51 nod 1001 数组中和等于K的数对
    51 nod 1081 子段求和
    51nod 1134 最长递增子序列 (O(nlogn)算法)
    51nod 1174 区间中最大的数(RMQ)
  • 原文地址:https://www.cnblogs.com/lisi2016/p/6863915.html
Copyright © 2011-2022 走看看