一つ、問題
Flink 1.12.0には、重要な機能であるバッチストリーム統合があります。つまり、バッチデータは以前のストリーム処理APIで処理できます。
setRuntimeMode(RuntimeExecutionModeexecutionMode)を呼び出すだけです。
RuntimeExecutionModeは列挙型であり、ストリーム、バッチ、および自動があります。
@PublicEvolving
public enum RuntimeExecutionMode {
STREAMING,
BATCH,
AUTOMATIC;
private RuntimeExecutionMode() {
}
}
最も単純なWordCountプログラムを使用してデモンストレーションを行いましょう。
1.テストするテキストテキスト
apple flink flink
hello es flink
study flink
2. WordCount、setRuntimeModeを設定しないでください
public class Test01_WordCount_Tuple {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> source = env.readTextFile(BaseConstant.WORD_COUNT_TEST);
SingleOutputStreamOperator<Tuple2<String, Integer>> wordAndOne = source
.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
String[] split = value.split(" ");
if (split != null && split.length > 0) {
Stream<String> stream = Arrays.stream(split);
stream.forEach(word -> out.collect(Tuple2.of(word, 1)));
}
}
}).returns(Types.TUPLE(Types.STRING, Types.INT));
SingleOutputStreamOperator<Tuple2<String, Integer>> sum = wordAndOne
.keyBy(f -> f.f0)
.sum(1);
sum.print();
env.execute();
}
}
演算結果:バッチデータがストリーム処理の方法で処理されていることがわかりますが、これは私たちが望んでいることではありません
5> (study,1)
7> (flink,1)
6> (es,1)
7> (flink,2)
7> (apple,1)
7> (flink,3)
7> (flink,4)
3> (hello,1)
3. WordCount、ANDsetRuntimeMode(RuntimeExecutionMode.BATCH)
env.setRuntimeMode(RuntimeExecutionMode.BATCH)を設定し、ストリーム処理のkeyByメソッドを使用するだけです。
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
和之前唯一不同的是添加了这行,设置为批处理
env.setRuntimeMode(RuntimeExecutionMode.BATCH);
DataStreamSource<String> source = env.readTextFile(BaseConstant.WORD_COUNT_TEST);
運転結果
7> (flink,4)
このとき、flinkという単語だけが出力されていることがわかりましたが、これは明らかに間違っていました。
4.問題を解決します
Baiduを通じて、バグがFlink 1.12.1で修正されていることが判明しました。このバグは、バッチリデュース内の単一値のアキュムレータの問題が原因です。
Flink 1.12.1以降にアップグレードします(ブログを作成する場合、最新のものは1.12.2です)。問題を解決できることがわかりました。
Flinkをアップグレードした後、実行結果は次のようになります。このバッチ結果が必要です。
5> (study,1)
6> (es,1)
7> (apple,1)
3> (hello,1)
7> (flink,4)