数据分类
有界数据,无界数据,其实没有必要,分为流数据和静态数据还差不多。
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。