storm(三) 编程关键类

Storm概念

  • storm的编程其实就是设计topology的过程,该过程中最主要的就是Spout、bolt还有grouping

关键类

创建topology

  • 这个部分可以直接参考官网,使用TopologyBuilder类
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("createNum",new NumSpout(),1);
builder.setBolt("countNum",new SumBolt(),1)
        .shuffleGrouping("createNum");
StormTopology topology=builder.createTopology();

Spout和Bolt

spout

- BaseRichSpout(帮我们将一些不用关注的方法空实现了)
    - BaseComponent
        - IComponent
    - IRichSpout(主要需要实现的方法都在这里面)
        - ISpout
        - IComponent
  • 现在BaseRichSpout中还需要实现的就是:
public class ReadSpout extends BaseRichSpout {
    private SpoutOutputCollector collector;
    private final static String FILE_DIR="testFile.txt";
    private final static String SEPARATOR=",";
    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
        this.collector=collector;
    }
    public void nextTuple() {
        File file=new File(FILE_DIR);
        try (
            BufferedReader br=new BufferedReader(new FileReader(file));
        ){
            String line;
            while ((line=br.readLine())!=null) {
	            //发出消息
                collector.emit(new Values(line));
                System.out.println("line:" + line);
            }
            Thread.sleep(10000);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
    //定义发出消息的字段名称
        declarer.declare(new Fields("line"));
    }
}

bolt

- BaseRichBolt
    - BaseComponent
        - IComponent
    - IRichBolt(主要需要实现的方法都在这里面)
        - IBolt
        - IComponent
public class SplitBolt extends BaseRichBolt {
    private OutputCollector collector;
    private final static String SEPARATOR=",";
    @Override
    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
        this.collector=collector;
    }
    @Override
    public void execute(Tuple input) {
        String line=input.getStringByField("line");
        String[] words=line.split(SEPARATOR);
        for (String word:words){
            this.collector.emit(new Values(word));
        }
        System.out.println("word:"+ Arrays.toString(words));
    }
    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declare(new Fields("word"));
    }
}
包与接口实验报告 实验 包与接口 【实验目的】 1. 了解Java 中包(package)、接口(interface)的作用。 2. 掌握包、接口设计方法。 【实验要求】 1. 了解Java 系统包的结构。 2. 掌握创建自定义包的方法。 3. 掌握使用系统接口的技术和创建自定义接口的方法。 【实验步骤】 一.了解并使用Java 的系统包 1. API 包、接口、异常处理的作用 包是和接口的集合。利用包可以把常用的或功能相似的放在一个包中。Java 语言提供系统包,其中包含了大量的,可以在编写Java 程序时直接引用它们。为便于管理和使用它们,将这些分为了不同的包。包又称库或API 包,所谓API(Application Program Interface)即应用程序接口。API 包—方面提供丰富的与方法供大家使用,如画图形、播放声音等,另一方面又负责和系统软硬件打交道,圆满实现用户程序的功能。所有Java API 包都以“java.”开头,以区别用户创建的包。 常见Java系统包及其作用: 1)语言包(java.lang):提供的支持包括字符串处理、多线程处理、异常处理、数学函数处理等,可以用它简单地实现Java程序的运行平台。 2)实用程序包(java.util):提供的支持包括哈希表、堆栈、可变数组、时间和日期等。 输入输出包(java.io):用统一的流模型来实现所有格式的I/O,包括文件系统、网络、输入。 3)网络包(java.net):支持Internet的TCP/IP协议,用于实现Socket编程;提供了与Internet的接口,支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。 4)抽象图形用户接口包(javax.swing):实现了不同平台的计算机的图形用户接口部件,包括窗口、菜单、滚动条、对话框等,使得 Java可以移植到不同的平台。 接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值