作者:jiangzz
电话:15652034180
微信:jiangzz_wx
微信公众账号:jiangzz_wy
ApacheFlink® - 是针对于数据流的状态计算,Flink具有特殊类DataSet和DataStream来表示程序中的数据。您可以将它们视为可以包含重复项的不可变数据集合。在DataSet的情况下,数据是有限的,而对于DataStream,元素的数量可以是无限的。
这些集合在某些关键方面与常规Java集合不同。首先,它们是不可变的,这意味着一旦创建它们就无法添加或删除元素。你也不能简单地检查里面的元素。 最初通过在Flink程序中添加Source来创建集合,并通过使用诸如map,filter等API方法对它们进行转换来从这些集合中派生新集合。
结构分析
Flink程序看起来像是转换数据集合的常规程序。每个程序包含相同的基本部分:
- 获得执行环境,
- 加载/创建初始数据,
- 指定此数据的转换,
- 指定放置计算结果的位置,
- 触发程序执行
获取执行环境
Flink提供了三种运行Flink计算的方式:
- 远程jar包部署方式
var streamEnv = StreamExecutionEnvironment.getExecutionEnvironment()
- 本地执行
var streamEnv = StreamExecutionEnvironment.createLocalEnvironment()
- 跨平台提交
var streamEnv = StreamExecutionEnvironment.createRemoteEnvironment("CentOS",8081,"jarFiles")
用户可以更具需求自行抉择选择哪种方式测试或者运行代码。
加载/创建初始数据
创建需要加载的数据源,一般该数据源来源于消息队列或者其他第三方系统,为了测试方便这里我们先使用socketTextStream
实现数据源的加载。
var source = streamEnv.socketTextStream("CentOS", 9999)
指定此数据的转换
通过指定数据转换规则对DataStream上应用转换以创建新的派生DataStream。
source.flatMap(_.split("\\W+"))
.map((_,1))
.keyBy(0)
.sum(1)
将计算结果存储到 文件中
writeAsCsv("D:/flinks/results")
触发程序执行
streamEnv.execute("wordcounts")
将以上程序放置在一起
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.api.scala._
//1.创建流处理执行环境 - 本地环境
var streamEnv <