Flink-pomプロジェクトの構築と簡単なWordCountプログラム(Java)
pomを構築する
公式に推奨される書き込み方法を使用し、コマンドラインに次のコードを入力することを強くお勧めします(入力する必要はありません。flinkのバージョン番号を変更するだけです。1.9.1を使用しました)
mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-java \
-DarchetypeVersion=1.9.1
次に、プロンプトに従い、groupId、artId、packageおよびその他の情報を入力します。
この公式ケースを使用してpomを作成する利点は何ですか?
- pomはあなたのために書かれており、ログ構成は
- また、デモ、オフラインデモ、およびリアルタイムデモが付属しています
WordCountプログラムを書く(ラムダなし)
まず、マスターノードなどの構成したflinkクラスターでポート8888を開きます。
nc -lk 8888
コードは次のように表示されます。
public class StreamWordCount {
public static void main(String[] args) throws Exception {
// 1.创建一个flink stream 程序执行的环境
StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();
// 2.通过这个环境创建一个抽象的的数据集dataStream
DataStreamSource<String> dataStream = environment.socketTextStream("192.168.237.130", 8888);
// 3.调用dataStream上的方法 ,如:transformation(可以不调用) 和sink(必须调用,类似于spark的action,提交动作)。
// 调用transformation会将一个dataStream转换为一个新的dataStream
SingleOutputStreamOperator<String> dataStream2 = dataStream.flatMap(new FlatMapFunction<String, String>() {
public void flatMap(String line, Collector<String> out) throws Exception {
// 将一行单词进行切分
String[] words = line.split(" ");
for (String word : words) {
// 切分后输出
out.collect(word);
}
}
});
// 4.将单词和数字1进行组合,返回一个dataStream
SingleOutputStreamOperator<Tuple2<String, Integer>> dataStream3 =
dataStream2.map(new MapFunction<String, Tuple2<String, Integer>>() {
public Tuple2<String, Integer> map(String word) throws Exception {
return Tuple2.of(word, 1);
}
});
// 5.进行分组聚合,根据单词进行keyBy,然后把对应的第一个数据进行累加。这里的数字是下标,对应的Tuple2<String,Integer>
SingleOutputStreamOperator<Tuple2<String, Integer>> dataStream4 =
dataStream3.keyBy(0).sum(1);
// 到这里transformation结束
// 6.调用sink
dataStream4.print();
// 7.启动
environment.execute("StreamWordCount");
}
}
次に、端末に入力します
。このとき、アイデアのプリンターが表示されます。
WordCountプログラムを作成する(ラムダを使用)
コード:
public class LambdaStreamWordCount {
public static void main(String[] args) throws Exception {
// 创建环境
StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();
// 创建第一个dataStream
DataStreamSource<String> dataStream = environment.socketTextStream("192.168.237.130", 8888);
SingleOutputStreamOperator<Tuple2<String, Integer>> dataStream2 = dataStream.flatMap((String line, Collector<Tuple2<String, Integer>> out) -> {
Arrays.stream(line.split(" ")).forEach(word -> {
out.collect(Tuple2.of(word, 1));
});
}) // 如果使用了lambda表达式,必须使用returns来返回一个规定的类型
.returns(Types.TUPLE(Types.STRING, Types.INT));
SingleOutputStreamOperator<Tuple2<String, Integer>> sum = dataStream2.keyBy(0)
.sum(1);
sum.print();
environment.execute("LambdaStreamWordCount");
}
}
プログラムをjarパッケージに入力し、実行用のページに配置します
- コードを変更する必要がある行:(最初のパラメーターはip、2番目のパラメーターはポート)
DataStreamSource<String> dataStream = environment.socketTextStream(args[0], Integer.parseInt(args[1]));
他のコード変更はありません
- ターミナルでコマンドを入力します。
mvn clean package
- flinkにアップロード:(完全なクラス名とポート番号+このクラスのIPを入力)
特定の操作については、別のブログのコンテンツを参照してください:
Flink-はじめにとスタンドアロンクラスターのインストール、およびタスクモジュールを開始するための簡単なテストページ操作(異なるフルクラス名は自動的に入力されません。自分で入力する必要があります)
- ターミナルに入る
- 結果の表示: