storm笔记(一)

环境配置:

 

在每个节点上操作:

1、下载,解压,配置环境变量。

2、依赖安装

3、修改storm.yaml

 

启动zookeeper

启动nimbus

启动若干supervisor

启动ui

序列化:0.6版本以后变化大。

使用kyro序列化。

处理的字段类型是动态的。

 

事务的概念:每个流要有唯一id,第一次执行成功,再一次执行会跳过。保证只执行一次。

 

配置文件优先级:

defaults.yaml <storm.yaml < topology specific configuration < internal componentspecific configuration < external component specific configuration

 

Storm uses modhashing to map a spout tuple id to an acker task

 

Acker = map(tuple id,[task id,ack val])

 

There are three waysto remove reliability. The first is to set Config.TOPOLOGY_ACKERS to 0

Youcan turn off tracking for an individual spout tuple by omitting a message id intheSpoutOutputCollector.emit method

you canemit them as unanchored tuples

 

worker死掉,supervisor会重启它,多次重启失败,nimbus会把worker指定到另一台机器。

 


 

 


 

 

正在运行的topology可以用客户端命令改变并行度:

storm rebalancemytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

 

也可以在ui改。

 

DRPC

分布式并行计算,把输入流当做函数的参数,把函数执行结果当做输出流发出。


 

 

客户端给DRPC服务器发送要执行的方法的名字,以及这个方法的参数。实现了这个函数的topology使用DRPCSpout从DRPC服务器接收函数调用流。每个函数调用被DRPC服务器标记了一个唯一的id。这个topology然后计算结果,在topology的最后一个叫做ReturnResults的bolt会连接到DRPC服务器,并且把这个调用的结果发送给DRPC服务器(通过那个唯一的id标识)。DRPC服务器用那个唯一id来跟等待的客户端匹配上,唤醒这个客户端并且把结果发送给它。

 

LinearDRPCTopologyBuilder的工作原理

(过期类,现在使用trident

DRPCSpout发射tuple: [args, return-info]。return-info包含DRPC服务器的主机地址,端口以及当前请求的request-id

DRPC Topology包含以下元素:

DRPCSpout

PrepareRequest(生成request-id, return info以及args)

CoordinatedBolt

JoinResult-- 组合结果和return info

ReturnResult-- 连接到DRPC服务器并且返回结果

LinearDRPCTopologyBuilder是利用storm的原语来构建高层抽象的很好的例子。

 

 

Trident has joins,aggregations, grouping, functions, and filters.

数据库或其它持久存储的增量处理。

 

输入源可以是FixedBatchSpout,也可以是 Kestrel 或 Kafka,zk保存了输入源的元数据信息。

 

特性:fault-tolerant, exactly-once ,所以可以用来更新数据库等存储系统。

 

persistentAggregate(new MemoryMapState.Factory(), new Count(), newFields("count")) //放入内存,可以选择放入其他持久库,github上有很多实现了的state,例如:trident-memcached,trident-redis等。

 

Trident在处理输入stream的时候会把输入转换成若干个tuple的batch来处理。我们在task节点利用trident进行持久化操作时的效率应该是可以的。利用TridentState ,通过DRPC,可以进行持久化数据的查询。存和取的过程都是批处理的形式。并且聚合操作有类似mapreducecombiner 的优化。

trident会翻译成高效的storm topology

 

 

Trident提供了下面的语义来实现有且只有一次被处理的目标。

 

Tuples 是被分成小的集合被批量处理的 (see the tutorial)

每一批tuples被给定一个唯一ID作为事务ID (txid). 当这一批tuple被重播时, txid不变.

批与批之间的状态更新时严格顺序的。比如说第三批tuple的状态的更新必须要等到第二批tuple的状态更新成功之后才可以进行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值