关于 Storm 的 Spout 组件的生命周期问题


大家好,刚刚开始学习 Storm .
按照 《Storm入门》这篇文章写了个 WordCount 的程序。
其中的 Spout 的内容为:


 ...
public void nextTuple(){
    String str;
    try {
        while((str =reader.readLine())!=null) {
            this._collection.emit(new Values(str),str); //将从文件中读取到的行发射出去
        }
    } catch (IOException ex) {
        throw new RuntimeException("error reading tuple");
    }  
}

这段程序的功能主要是从文件中读取行并发射出去。因为 nextTuple() 方法会被不停的调用,则不断的发射数据。但是每次调用 nextTuple 都会将这个文件从头开始重新读取一遍么?文件小还好,如果时一个 几个T的文件时应该怎么办呢?

对概念还是不太清楚,请大家讲解一下。谢谢

storm 大数据 java

RyoYL 10 years, 10 months ago

哦。。自己搞懂了
因为 reader 对象是在 open() 方法中初始化的。所以初始化一次,之后每次调用 nextTuple() 方法都不是从头读取一遍,而是从当前位置开始读取。

狂热粉真可怕 answered 10 years, 10 months ago

Your Answer