storm学习之接口实现及代码发布集群

2.storm学习之接口实现及代码发布集群

已单词计数为列,代码列子参见《Storm分布式实时计算模式》一书;

代码github地址:https://github.com/yuexianbing/storm_test;

基础概念:
  1. Storm的核心结构是tuple,无限制的tuple组成的序列即为Stream;
  2. spout是storm topology的主要数据入口;
  3. bolt接收spout的数据,对数据计算后可输出多个数据流,bolt可订阅多个由spout或bolt发射的数据;
Storm的数据流分组:

     Storm内置了7种数据流分组方式:

  1. Shuffle grouping(随机分组):随机将tuple分发给bolt的各task,每个bolt接收到相同数量的tuple;
  2. Field group(按字段分组):将所有具有相同字段值的tuple路由到同一个bolt的task;
  3. All grouping(全复制分组):将所有的tuple复制后分发给所有的bolt task。每个订阅数据流的task都会接收到tuple的拷贝;
  4. Golble grouping(全局分组):将所有的tuples路由到唯一的一个task上。storm按最小的taskId来选取接收数据的task。这种分组,将所有的tuple转发到一个jvm实例,可能会引起集群中某一个节点崩溃;
  5. None grouping(部分组):功能上和随机分组相同;
  6. Direct grouping(指向型分组):数据源调用emitDirect()方法判断一个tuple应由哪个Storm组件接收;
  7. Local or shhuffle grouping(本地或随机分组):如果worker内由接收数据的bolt task,storm会将tuple分发给同一个worker内的bolt task。其他情况下采用随机分组。本地或随机分组可减少网络传输,从而提高topology的性能。
spout接口实现:
import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichSpout;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values;

import java.util.Map;

/**
 * @author yuebing
 * @version 1.0 2017/9/4
 */
public class SentenceSpout extends BaseRichSpout {
    private SpoutOutputCollector outputCollector;
    private String[] sentence = {
            "I have a dog",
            "The dog is big dog",
            "Tt's name is huahua",
            "It is a brave dog"
    };
    private int index = 0;
    @Override
    public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) {
        this.outputCollector = spoutOutputCollector;
    }
    //提交tuple
    @Override
    public void nextTuple() {
        if (index < sentence.length) {
            this.outputCollector.emit(new Values(sentence[index]));
            index++;
        }
    }
    //发射tuple
    @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
        outputFieldsDeclarer.declare(new Fields("sentence"));
    }
}
bolt接口实现:
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值