一、flink编程方法
- 获取执行环境(execution environment)
- 加载/创建初始数据集
- 对数据集进行各种转换操作(生成新的数据集)
- 指定将计算的结果放到何处去
- 触发APP执行
flink的计算方式和spark一样都是惰性的
- Flink APP都是延迟执行的
- 只有当execute()被显示调用时才会真正执行
- 本地执行还是在集群上执行取决于执行环境的类型
- 好处:用户可以根据业务构建复杂的应用,Flink可以整体进优化并生成执行计划
二、DataStream
DataStream 是 Flink 流处理 API 中最核心的数据结构。它代表了一个运行在多个分区上的并行流。一 个 DataStream 可以从 StreamExecutionEnvironment 通过env.addSource(SourceFunction) 获得。 DataStream 上的转换操作都是逐条的,比如 map(),flatMap(),filter()
2.1、自定义转换函数
1、函数
scala函数
data.flatMap(f => f.split(" "))
java的lambda表达式
data.flatMap(f -> f.split(" "));
2、实现接口
data.flatMap(new FlatMapFunction[String,String] { override def flatMap(value: String, out: Collector[String]) = { val strings: Array[String] = value.split(" ") for(s <- strings){ out.collect(s) } } })
3、RichFunctions
RichFunction中有非常有用的四个方法:open,close,getRuntimeContext和setRuntimecontext 这些功能在参数化函数、创建和确定本地状态、获取广播变量、获取运行时信息(例如累加器和计数器)和迭代信息时非常有帮助。
示例代码