storm程序-单词统计wordcount

该博客介绍了如何使用Storm框架实现一个简单的wordcount程序。从spout获取输入,通过bolt1将句子拆分为单词,然后在bolt2中进行单词统计。文章详细展示了spout、bolt的代码,storm驱动类的配置,以及pom.xml文件内容。最后,说明了如何打包上传到集群运行,并通过storm UI观察运行结果和检查mini3节点上的日志。
摘要由CSDN通过智能技术生成

spout代码:

public class MyLocalFileSpout extends BaseRichSpout {
   
    public static final String FILE_PATH = "/root/1.log";
//    public static final String FILE_PATH = "D:\\1.log";
    private SpoutOutputCollector collector;
    private BufferedReader bufferedReader;

    //初始化方法
    //该方法只会被调用一次,用来初始化
    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
        this.collector = collector;
        try {
            this.bufferedReader = new BufferedReader(new FileReader(new File(FILE_PATH)));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }

    //Storm实时计算的特性就是对数据一条一条的处理
    //while(true){
   
    // this.nextTuple()
    // }
    public void nextTuple() {
        // 每被调用一次就会发送一条数据出去
        try {
            String line = bufferedReader.readLine();
            if (StringUtils.isNotBlank(line)) {
                List<Object> arrayList = new ArrayList<Object>();
                arrayList.add(line);
                collector.emit(arrayList);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        //消息源可以发射多条消息流stream。多条消息流可以理解为多中类型的数据。
        declarer.declare(new Fields("juzi"));
    }
}

bolt1 句子分割成单词代码:

/**
 * Map --->word,1
 */
public class MySplitBolt extends BaseBasicBolt {
   

    public void execute(Tuple input, BasicOutputCollector collector) {
        //1、数据如何获取
        String juzi = (String) input.getValueByField("juzi");
        //2、进行切割
        String[] strings = juzi.split(" ");
        //3、发送数据
        for (String word : strings) {
            //Values 对象帮我们生成一个list
            collector.emit(new Values(word, 1));
        }
    }

    public
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值