zoukankan      html  css  js  c++  java
  • Storm 核心组件详解及storm编程核心Api

    storm编程模型
    Topologies
    Streams
    Spouts
    Bolts

    Storm核心组件

    Topologies
    Streams
    Spouts
    Bolts
    Stream groupings
    Reliability
    Tasks
    Workers

    具体介绍如下:

    topology 是storm中运行的一个实时应用程序的名称(拓扑),因为各个组件间的消息流动而形成逻辑上的拓扑结构。

    stream 表示数据的流向,流式Storm的核心抽象。一个流是一个无界Tuple序列,Tuple可以包含整性、长整型、短整型、字节、字符、双精度数、浮点数、布尔值和字节数组。用户可以通过定义序列化器,在本机Tuple使用自定义类型;

    spout 在一个topology中获取源数据流的组件,通常情况下spout会从外部数据源读取数据,然后转换为topology内部的源数据;

    bolt 接收数据,然后执行处理的组件,用户可以其中执行自己想要的操作(Bolt可以完成过滤、业务处理、连接运算、连接访问数据库等业务);

    stream grouping(流分组) 流分组是拓扑定义的一部分,为每个Bolt指定应该接收哪个流作为输入。在bolt的任务中定义流应该如何分区,Storm有7个内置的流分组接口(随机分组(Shuffle grouping)、字段分组(Fields grouping)、全部分组(All grouping)、全局分组(Global grouping)、无分组(None grouping)、直接分组(Direct grouping)、本地或随机分组(Local or shuffle grouping))

    Worker(工作进程)是Spout/Bolt中运行具体处理逻辑的进程。Topology跨一个或多个Worker节点的进程执行,每个Worker节点的进程是一个物理的JVM和Topology执行所有任务的子集。

    Task(任务) Worker中每一个Spout/Bolt的线程称为一个任务。每个spout或bolt在集群执行许多任务,每个任务对应一个线程的执行,流分组定义如何从一个任务集到另一个任务集发送Tuple。可通过TopologyBuilder类的setSoupt()和setBolt()方法来设置每个spout或bolt的并行度(parallelism)。

    总结如下:

    Topologies:
    拓扑结构对象
       storm是以topologies为单位,来运行作业

    Spouts:
    数据的产生源头

    Bolts:
    处理数据的逻辑

    tuples:传输数据,此数据是封装到tuples对象实现

     

    分析storm编程核心的api

    配置pom文件


    ISpout接口
    ISpout是实现Spout的核心接口, Spout负责将数据送到topology中处理, Storm 会跟踪Spout发出的tuple的DAG:
    当Storm发现tuple的DAG成功的执行处理, 会发送一个ack message给spout,
    当执行失败, 会发送以fail message 给spout;
    ISpout接口特点
    1.Spout每次释放tuple, 都会用一个id标记该tuple, 这个id可以是任何类型, 当storm ack 或fail一个message, 就会通过id来追溯到和那个Spout相关联,如果spout省略了id,或设置一个null, 那么storm就不追溯到这个tuple信息, 那就无法反馈ack或fail信息,spout也无法收到信息。

    2.Storm在相同的线程中执行ack , fail , nextTuple,这意味着ISpout的实现者不用考虑这些方法的并发性问题, 但是,同时要保证nextTuple方法不能阻塞,否侧导致ack, fail被阻塞,等待执行,然而fail的timeout决定不能被阻塞。

    ISpout方法

     


    //当Spout组件初始化时,触发调用此方法
    //SpoutOutputCollector:用于发送数据到下游组件
    void open(Map conf, TopologyContext context, SpoutOutputCollector collector);

    //产生数据,并且发送数据到下游组件
    void nextTuple();
    //数据发送成功,则回调此方法
    void ack(Object msgId);
    //数据发送失败,则回调此方法
    void fail(Object msgId);



    IBolt接口

    职责:接收tuple处理,并进行相应的处理(filter/join/....) hold住tuple再处理IBolt会在一个运行的机器上创建,使用Java序列化它,然后提交到主节点(nimbus)上去执行nimbus会启动worker来反序列化,调用prepare方法,然后才开始处理tuple处理

    prepare:初始化
    execute:处理一个tuple,tuple对象中包含了元数据信息
    cleanup:shutdown之前的资源清理操作

    bolt 接收数据,然后执行处理的组件,用户可以其中执行自己想要的操作(Bolt可以完成过滤、业务处理、连接运算、连接访问数据库等业务);

    stream grouping(流分组) 流分组是拓扑定义的一部分,为每个Bolt指定应该接收哪个流作为输入。在bolt的任务中定义流应该如何分区,Storm有7个内置的流分组接口(随机分组(Shuffle grouping)、字段分组(Fields grouping)、全部分组(All grouping)、全局分组(Global grouping)、无分组(None grouping)、直接分组(Direct grouping)、本地或随机分组(Local or shuffle grouping))


    //当bolt组件初始化时,触发此方法
    void prepare(Map stormConf, TopologyContext context, OutputCollector collector);
    //此方法接受上游数据,并且处理数据
    void execute(Tuple input);
    void cleanup();




     

     

     

  • 相关阅读:
    UIWebView 滑动卡停 (卡顿)
    UITapGestureRecognizer 手势传值
    ios8 新特性 UITableViewRowAction
    unrecognized selector sent to instance出现的原因
    iOS 界面上绘制不同字体 颜色 大小的字符串
    NSNumberFormatter 数字格式化输出
    iOS开发-63】Unknown type name "CGRect",did you mean "Rect"?的解决方案
    收起键盘
    iOS8 【xcode6中添加pch全局引用文件】
    fastjson安全漏洞-20200601升级方案
  • 原文地址:https://www.cnblogs.com/Transkai/p/10891242.html
Copyright © 2011-2022 走看看