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を作成する利点は何ですか?

  1. pomはあなたのために書かれており、ログ構成は
  2. また、デモ、オフラインデモ、およびリアルタイムデモが付属しています

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パッケージに入力し、実行用のページに配置します

  1. コードを変更する必要がある行:(最初のパラメーターはip、2番目のパラメーターはポート)
DataStreamSource<String> dataStream = environment.socketTextStream(args[0], Integer.parseInt(args[1]));

他のコード変更はありません

  1. ターミナルでコマンドを入力します。
mvn clean package

ここに画像の説明を挿入

  1. flinkにアップロード:(完全なクラス名とポート番号+このクラスのIPを入力)
    特定の操作については、別のブログのコンテンツを参照してください:
    Flink-はじめにとスタンドアロンクラスターのインストール、およびタスクモジュールを開始するための簡単なテストページ操作(異なるフルクラス名は自動的に入力されません。自分で入力する必要があります)
    ここに画像の説明を挿入
  2. ターミナルに入る
    ここに画像の説明を挿入
  3. 結果の表示:

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Zong_0915/article/details/107735743