數據分類
有界數據,無界數據,其實沒有必要,分爲流數據和靜態數據還差不多。
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。