Storm 核心组件详解及storm编程核心Api

storm编程模型TopologiesStreamsSpoutsBolts

Storm核心组件

TopologiesStreamsSpoutsBoltsStream groupingsReliabilityTasksWorkers

具体介绍如下:

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();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值