Flink作为一个非常优秀的大数据实时计算框架,在很多从事大数据开发的公司都是必备的技能,接下来我将通过Flink以批处理和流处理这两种方式来实现入门案例WordCount
一、开发环境准备
- scala-sdk-2.12
- jdk-1.8.0_201
- idea安装Scala插件
二、Idea创建maven项目
跟创建普通的maven项目一样,最终创建的maven项目结构如下:
说明:
- data : 存放模拟的数据源文件
- src/main/scala:存放主要代码
- pom.xml:依赖的pom依赖
三、批处理实现
1、首先在data下面创建需要使用的源文件,然后在里面写一些单词,我模拟的数据源如下:
2、编写代码
package batch.wc
import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment}
import org.apache.flink.api.scala._
/**
* @Author: zxb
* @Date : 2020/12/21 10:32 下午
*/
object WordCount {
def main(args: Array[String]): Unit = {
val env = ExecutionEnvironment.getExecutionEnvironment
val inputDS: DataSet[String] = env.readTextFile("data/wc/wordcount.txt")
val wordCountDS = inputDS.flatMap(_.split(" ")).map((_, 1)).groupBy(0).sum(1)
wordCountDS.print()
}
}
3、打印结果:
四、流处理实现
1、终端执行 nc -lk 7777模拟数据源实时输入
2、编写代码:
package streaming.wc
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
import org.apache.flink.streaming.api.scala._
/**
* @Author: zxb
* @Date : 2020/12/21 10:57 下午
*/
object StreamWordCount {
def main(args: Array[String]): Unit = {
val env = StreamExecutionEnvironment.getExecutionEnvironment
val inputDataStream: DataStream[String] = env.socketTextStream("localhost", 7777)
val wordCountStream: DataStream[(String, Int)] = inputDataStream.flatMap(_.split(" "))
.filter(_.nonEmpty)
.map((_, 1))
.keyBy(0)
.sum(1)
wordCountStream.print()
env.execute("stream word count")
}
}
3、输出结果: