import org.apache.flink.api.java.utils.ParameterTool import org.apache.flink.streaming.api.scala.{StreamExecutionEnvironment, _} /** DATE:2022/10/1 19:10 * AUTHOR:GX */ object streamWordCount { def main(args: Array[String]): Unit = { //创建流处理运行环境 val env = StreamExecutionEnvironment.getExecutionEnvironment // env.setParallelism(16) //设置当前并行度 //执行在哪一个线程是根据当前单词的哈希值决定的 //从外部命令中提取参数作为socket主机名和端口号 val paramTool:ParameterTool = ParameterTool.fromArgs(args) val host = paramTool.get("host") val port = paramTool.getInt("port") //接受一个socket文本流 val inputDataStream:DataStream[String] = env.socketTextStream(host,port) //进行转换处理统计 val resultDataStream:DataStream[(String,Int)] = inputDataStream .flatMap(x=>x.split(" ")) .filter(_.nonEmpty) .map((_,1)) .keyBy(0) //分组基于当前key的hash值取模 .sum(1) //打印输出 resultDataStream.print() // .setParallelism(1) //输出数据可能乱序,网络传输的时候已经乱了,并行度为1时不乱,不能实现高并发,高吞吐量 //启动一个进程,等待数据输入 //启动任务执行 env.execute("streamWordCount") /* 3> (hello,1) 前面的数字并行的线程 当前机器的核数 5> (world,1) 7> (flink,1) 7> (flink,2)*/ } }
--host master --port 7777
master: nc -lk 7777