Flink程序遵循一定的编程模式。DataStream API 和 DataSet API 基本具有相同的程序结构。以下为一个流式程序的示例代码来对文本文件进行词频统计。
package com.realtime.flink.streaming
import org.apache.flink.apijava.utils.ParameterTool
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment, _}
object WordCount {
def main(args: Array[String]) {
//第一步:设定执行环境
val env = SreamExecutionEnvironment.getExecutionEnvironment
//第二步:指定数据源地址,开始读取数据
val text = env.readTextFile("file:///path/file")
//第三步:对数据集指定转换操作逻辑
val counts : DataStream[(String, int)] = text
.flatMap(_.toLowerCase.split(" "))
.fliter(_.nonEmpty)
.map(_, 1)
.sum(1)
//第四步:指定计算结果输出位置
if (params.has("output")) {
counts.writeAsText(params.get("output"))
} else {
println("Printing resule to stdout. Use --output to specify output path.")
counts.print()
}
//第五步:指定名称并触发流式任务
env.execute("Streaming WordCount")
}
}
整个Flink 程序一共分为5步:
1. Flink执行环境
不同的执行环境决定了应用的类型:
StreamExecutionEnvironmen用来流式处理,ExecutionEnvironment是批量数据处理环境.
获取环境的三种方式:
-
流处理:
//设定Flink运行环境,如果在本地启动则创建本地环境,如果在集群启动就创建集群环境 StreamExecutionEnvironment.getExecutionEnvironment //指定并行度创建本地执行环境 StreamExecutionEnv