• 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

  • 相关阅读:
    LeetCode第1题(two sum) 暴力法性能优化
    java.sql.SQLException: Column 'id' not found.
    数据分页显示 之 确定总页码数(优化)
    IntelliJ IDEA 提示"Form input without an associated label or title attribute"
    在JSP中图片上传到服务器后无法读取(已解决)
    The maximum-subarray problem
    Chapter 2:Getting Started
    Merge Sort in Java, C,C++ and Python
    Chapter 9 :Further Applications of Integration
    gSoap 中文传输
  • 原文地址:https://www.cnblogs.com/lisi2016/p/6863915.html
Copyright © 2020-2023  润新知