- Flink內(nèi)核原理與實現(xiàn)
- 馮飛 崔鵬云 陳冠華編著
- 1646字
- 2021-04-14 11:30:33
3.1 環(huán)境對象
StreamExecutionEnvironment是Flink應(yīng)用開發(fā)時的概念,表示流計算作業(yè)的執(zhí)行環(huán)境,是作業(yè)開發(fā)的入口、數(shù)據(jù)源接口、生成和轉(zhuǎn)換DataStream的接口、數(shù)據(jù)Sink的接口、作業(yè)配置接口、作業(yè)啟動執(zhí)行的入口。
Environment是運行時作業(yè)級別的概念,從StreamExecutionEnvironment中的配置信息衍生而來。進入到Flink作業(yè)執(zhí)行的時刻,作業(yè)需要的是相關(guān)的配置信息,如作業(yè)的名稱、并行度、作業(yè)編號Job ID、監(jiān)控的Metric、容錯的配置信息、IO等,用StreamExecutionRuntime對象就不合適了,很多API是不需要的,所以在Flink中抽象出了Environment作為運行時刻的上下文信息。
RuntimeContext是運行時Task實例級別的概念。Environment本身仍然是比較粗粒度作業(yè)級別的配置,對于每一個Task而言,其本身有更細節(jié)的配置信息,所以Flink又抽象了RuntimeContext,每一個Task實例有自己的RuntimeContext,RuntimeContext的信息實際上是StreamExecutionEnvironment中配置信息和算子級別信息的綜合。
3種環(huán)境對象之間的關(guān)系如圖3-1所示。

圖3-1 3種環(huán)境對象的關(guān)系
對于開發(fā)者而言,StreamExecutionEnvironment在作業(yè)開發(fā)的Main函數(shù)中使用,RuntimeContext在UDF開發(fā)中使用,Environment則起到銜接StreamExecutionEnvironment和RuntimeContext的作用。
3.1.1 執(zhí)行環(huán)境
執(zhí)行環(huán)境是Flink作業(yè)開發(fā)、執(zhí)行的入口,當前版本Flink的批流在API并沒有統(tǒng)一,所以有流計算(StreamExecutionEnvironment)和批處理(ExecutionEnvironment)兩套執(zhí)行環(huán)境。在本書中,主要介紹流計算應(yīng)用執(zhí)行環(huán)境。
流計算執(zhí)行環(huán)境體系如圖3-2所示。

圖3-2 StreamExcecutionEnvironment類體系
StreamExecutionEnvironment是Flink流計算應(yīng)用的執(zhí)行環(huán)境,是Flink作業(yè)開發(fā)和啟動執(zhí)行的入口,開發(fā)者對StreamExecutionEnvironment的實現(xiàn)是無感知的。
1. LocalStreamEnvironment
本地執(zhí)行環(huán)境,在單個JVM中使用多線程模擬Flink集群。
一般用作本地開發(fā)、調(diào)試。使用Idea之類的IDE工具,可以比較方便地在代碼中設(shè)置斷點調(diào)試和單元測試。如果測試沒有問題,就可以提交到真正的生產(chǎn)集群。
其基本的工作流程如下。
1)執(zhí)行Flink作業(yè)的Main函數(shù)生成Streamgraph,轉(zhuǎn)化為JobGraph。
2)設(shè)置任務(wù)運行的配置信息。
3)根據(jù)配置信息啟動對應(yīng)的LocalFlinkMiniCluster。
4)根據(jù)配置信息和miniCluster生成對應(yīng)的MiniClusterClient。
5)通過MiniClusterClient提交JobGraph到MiniCluster。
2. RemoteStreamEnvironment
在大規(guī)模數(shù)據(jù)中心中部署的Flink生成集群的執(zhí)行環(huán)境。
當將作業(yè)發(fā)布到Flink集群的時候,使用RemoteStreamEnvironment。
其基本的工作流程如下:
1)執(zhí)行Flink作業(yè)的Main函數(shù)生成Streamgraph,轉(zhuǎn)化為JobGraph。
2)設(shè)置任務(wù)運行的配置信息。
3)提交JobGraph到遠程的Flink集群。
3. StreamContextEnvironment
在Cli命令行或者單元測試時候會被使用,執(zhí)行步驟同上。
4. StreamPlanEnvironment
在Flink Web UI管理界面中可視化展現(xiàn)Job的時候,專門用來生成執(zhí)行計劃(實際上就是StreamGraph),如圖3-3所示。

圖3-3 Flink執(zhí)行計劃
5. ScalaShellStreamEnvironment
這是Scala Shell執(zhí)行環(huán)境,可以在命令行中交互式開發(fā)Flink作業(yè)。
其基本工作流程如下。
1)校驗部署模式,目前Scala Shell僅支持attached模式。
2)上傳每個作業(yè)需要的Jar文件。
其余步驟與RemoteStreamEnvironment類似。
3.1.2 運行時環(huán)境
運行時環(huán)境在Flink中叫作Environment,是Flink運行時的概念,該接口定義了在運行時刻Task所需要的所有配置信息,包括在靜態(tài)配置和調(diào)度器調(diào)度之后生成的動態(tài)配置信息。
Environment類體系如圖3-4所示。

圖3-4 Environment類體系
其有兩個實現(xiàn)類RuntimeEnvironment和SavepointEnvironment。
1. RuntimeEnvironment
在Task開始執(zhí)行時進行初始化,把Task運行相關(guān)的信息都封裝到該對象中,其中不光包含了配置信息,運行時的各種服務(wù)也會被包裝到其中,如代碼清單3-1所示。
代碼清單3-1 Task初始化RuntimeEnvironment


2. SavepointEnvironment
SavepointEnvironment是Environment的最小化實現(xiàn),在狀態(tài)處理器的API中使用。Flink1.9版本引入的狀態(tài)處理器(State Processor)API真正改變了這一現(xiàn)狀,實現(xiàn)了對應(yīng)用程序狀態(tài)的操作。該功能借助DataSet API擴展了輸入和輸出格式以讀寫保存點或檢查點數(shù)據(jù)。由于DataSet和Table API的互通性,用戶甚至可以使用關(guān)系表API或SQL查詢來分析和處理狀態(tài)數(shù)據(jù)。
3.1.3 運行時上下文
RuntimeContext是Function運行時的上下文,封裝了Function運行時可能需要的所有信息,讓Function在運行時能夠獲取到作業(yè)級別的信息,如并行度相關(guān)信息、Task名稱、執(zhí)行配置信息(ExecutionConfig)、State等。
Function的每個實例都有一個RuntimeContext對象,在RichFunction中通過getRunctionContext()可以訪問該對象。
RuntimeContext的類體系如圖3-5所示。
不同的使用場景中有不同的RuntimeContext,具體如下。
1)StreamingRuntimeContext:在流計算UDF中使用的上下文,用來訪問作業(yè)信息、狀態(tài)等。
2)DistributedRuntimeUDFContext:由運行時UDF所在的批處理算子創(chuàng)建,在DataSet批處理中使用。
3)RuntimeUDFContext:在批處理應(yīng)用的UDF中使用。
4)SavepointRuntimeContext:Flink1.9版本引入了一個很重要的狀態(tài)處理API,這個框架支持對檢查點和保存點進行操作,包括讀取、變更、寫入等。

圖3-5 RuntimeContext類體系
5)CepRuntimeContext:CEP復(fù)雜事件處理中使用的上下文。
另外,在一些場景中不需要將RuntimeContext中的信息完全暴露,只需要其中某一部分信息,或者需要使用RuntimeContext之外的一些其他信息,這兩種情況下,需要對RuntimeContext再進行一次封裝。
- 大數(shù)據(jù)項目管理:從規(guī)劃到實現(xiàn)
- 協(xié)作機器人技術(shù)及應(yīng)用
- Dreamweaver CS3網(wǎng)頁設(shè)計與網(wǎng)站建設(shè)詳解
- Photoshop CS3特效處理融會貫通
- 大數(shù)據(jù)安全與隱私保護
- 單片機技術(shù)一學(xué)就會
- Machine Learning with Apache Spark Quick Start Guide
- 網(wǎng)絡(luò)服務(wù)搭建、配置與管理大全(Linux版)
- Artificial Intelligence By Example
- Data Analysis with R(Second Edition)
- Flash 8中文版全程自學(xué)手冊
- 運動控制器及數(shù)控系統(tǒng)的工程應(yīng)用
- 圖像傳感器應(yīng)用技術(shù)
- 仿蛛機器人的設(shè)計與制作
- 光電檢測技術(shù)與系統(tǒng)