程序结构
整个flink程序一共分为5步
- 设定Flink执行环境
- 创建和加载数据集
- 对数据集指定转换操作逻辑
- 指定计算结果输出位置
- 调用execute方法触发程序执行
WordCount案例
import org.apache.flink.api.scala.ExecutionEnvironment
object WordCount {
def main(args: Array[String]): Unit = {
test2()
}
def test2(): Unit = {
//第一步:设置执行环境
val env = ExecutionEnvironment.getExecutionEnvironment
//第二部:指定数据源地址,读取输入数据
val path = "file:///d:/hello.txt"
val text = env.readTextFile(path)
// 其中flatMap 和Map 中 需要引入隐式转换
import org.apache.flink.api.scala.createTypeInformation
//第三步:对数据集指定转换操作逻辑
val aggDs = text.flatMap(_.split(" ")).map((_, 1)).groupBy(0).sum(1)
//第四部:指定计算结果的输出位置
aggDs.print()
}
}
- Executorion Environment 批量处理作业和流式处理作业分别使用不同的Executoion Environment
- 流式数据处理环境: StreamExecutionEnvironment
- 批量数据处理环境: ExecutionEnvironment
创建流式处理环境
def test1(): Unit ={
//方式一:设定Flink运行环境,如果在本地启动,就创建本地环境,如果在集群上启动,就创建集群环境
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
//方式二: 指定并行度创建本地执行环境 --本地执行环境
val env2: StreamExecutionEnvironment = StreamExecutionEnvironment.createLocalEnvironment(5)
//方式三: 制定远程JobManagerIp 和RPC端口 以及运行程序所在jar包
StreamExecutionEnvironment.createRemoteEnvironment("JobManagerHost", 6021,5, "aplication.jar")
}
创建批量处理执行环境
//创建批量处理执行环境
def test3(): Unit ={
//方式一: 创建Flink运行环境
val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
//方式二: 创建本地运行环境,可以指定并行度
val env2: ExecutionEnvironment = ExecutionEnvironment.createLocalEnvironment(5)
//方式三: 指定远程Jobmanager 和RPC端口
ExecutionEnvironment.createRemoteEnvironment("JobManagerHost", 6021, 5,"application.jar")
}
初始化数据
通过readTextFile()将指定路径中的数据转换
执行转换操作
map, flatMap, filter, keyBy等
程序触发
所有的计算逻辑全部操作定义好之后,需要调用ExecutionEnvironment的execute()方法触发应用程序的指定, DataStream API需要显式调用, DataSet API不需要