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。

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