数据源仍在生成数据时,我的Flink Streaming作业执行完成了吗?

时间:2019-07-11 00:58:04

标签: java apache-flink

您好,我是Flink的新手,目前正在尝试建立一个基本管道,该管道从随机字符串生成器接收数据,执行wordCount并将输出保存到文件中。我有兴趣确保flink程序一直运行,直到我决定手动停止它或不再有输入数据为止。但是,即使仍在生成输入数据,该程序也会启动和结束。

我尝试使用以下两个窗口代码之一,但未成功:

.window(ProcessingTimeSessionWindows.withGap(Time.minutes(10))) .timeWindow(Time.of(2500,MILLISECONDS),Time.of(500,MILLISECONDS))

以下是连续运行的输入文件的示例:

ACBAB 欧共体 计算机辅助设计 伊达 英国广播公司 DCADD

这是我当前正在运行的代码:

公共静态void main(String [] args)引发异常{

    final ParameterTool params = ParameterTool.fromArgs(args);

    // set up the execution environment
    final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

    // get input data
    DataStream<String> text = null;
    if (params.has("input")) {
        // read the text file from given input path
        text = env.readTextFile(params.get("input"));
    } else {
        System.out.println("Executing WindowWordCount example with default input data set.");
        System.out.println("Use --input to specify file input.");
        // get default test text data
        text = env.fromElements("input");
    }

    // make parameters available in the web interface
    env.getConfig().setGlobalJobParameters(params);


    DataStream<Tuple2<String, Integer>> stream = 
        text.flatMap(new WindowWordCount.Tokenizer())
        .keyBy(0)
        .timeWindow(Time.of(2500, MILLISECONDS), Time.of(500, MILLISECONDS))
        .sum(1);

    // emit result
    if (params.has("output")) {
        stream.writeAsText(params.get("output"));
    } else {
        System.out.println("Printing result to stdout. Use --output to specify output path.");
        stream.print();
    }

    // execute program
    env.execute("WindowWordCount");
}


public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {

    @Override
    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
        // normalize and split the line
        String[] tokens = value.toLowerCase().split("\\W+");

        // emit the pairs
        for (String token : tokens) {
            if (token.length() > 0) {
                out.collect(new Tuple2<>(token, 1));
            }
        }
    }
}

}

程序运行正常,并在一段时间后停止,并显示以下消息:

开始执行程序 程序执行完成 JobID为74a6f54d80af96f029a8e6c32d9bc8da的作业已完成。 作业时间:176994毫秒

我想要的是使程序保持运行,因为我有兴趣分析flink引擎的性能指标。

0 个答案:

没有答案