Flink基本概念和编程模型

数据分类

有界数据,无界数据,其实没有必要,分为流数据和静态数据还差不多。

Flink 编程接口

高级语言:SQL

声明式API Table API

核心API DataStream/DateSet API

低级构建模块 Stateful Stream Processing

Flink程序结构

第一步是获取ENV,StreamExecutionEnvironment是流式环境,而ExecutionEnvironment是批处理环境。

有三种获取env的方式,以StreamExecutionEnvironment为例:

// 根据具体的情况,如果是在本地运行则启动本地环境,如果是在集群上则是集群环境
val env = StreamExecutionEnviroment.getExecutionEnviroment

// 指定并行度创建本地环境
val env = StreamExecutionEnvironment.createLocalEnviroment(5)

// 指定远程的JobManagerIP 和 RPC 端口以及运行程序所在jar包以及其他依赖包
val env = StreamExecutionEnvironment.createRemoteEnvironment("填写具体的Jobmanager的IP或者Host",6021,5,"填写jar包路径")

第二步是初始化数据

将数据转换为DataSet 或者 DataStream 数据结构。

第三步是执行Transformation操作

Flink中的Transformation操作都是通过不同的Operator来实现的,每个Operator内部通过实现Function接口完成数据处理逻辑的定义。

DataStream 和 DataSet API提供了大量的转换算子。

Flink中提供了大量的函数供用户使用,用户可以继承这些函数以实现自定义逻辑。
(1)可以通过创建新的Class继承Function接口。
(2)可以创建匿名类实现Function接口。
也可以实现RichFunction,RichFunction接口提供的更加丰富的方法来获取状态、缓存等信息。

第四步,指定分区key。

分区Key的指定方式:
(1)根据字段的索引位置确定,直接填写可索引的数据结构的索引标号。
(2)根据字段名称指定。用字符串格式的字段索引语法即可。
(3)传入覆盖getKey方法的KeySelector。

第五步,输出结果。

writeAsText
print
Connector

第六步,程序触发。

对于Streaming的程序需要显示调用

env.execute("App Name")

Flink 数据类型

相比Hadoop中所有的数据类型都需要事先Writable接口,Flink通过类型推断,支持了大部分的数据类型。最基类是TypeInformation类。

(1)BaseTypeInfo 数据类型,支持Java基本数据类型的装箱。

(2)BasicArrayTypeInfo 实现对 Java 的Array和List的推断。

(3)TupleTypeInfo 实现了对Tuple类型的推断。

(4)CaseClassTypeInfo实现了对scala case class 的支持,支持的字段数量是22个,支持字段名和位置索引,不支持存储空值(null)。

(5)PojoTypeInfo实现了对Java POJO的支持,POJO类中必须有默认空值构造器,所有的Fields必须都是public或者有getter和setter方法,字段类型必须是Flink支持的数据类型。

(6)其他特殊数据类型,例如Scala中的List,Map,Either,Option,Try,以及Hadoop中的Writable。

(7)用户还可以自定义TypeInfomation。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章