Flink淺談之JobManger、TaskManager

從集羣任務中剖析:

JobManager 負責整個 Flink 集羣任務的調度以及資源的管理,從客戶端中獲取提交的應用,然後根據集羣中 TaskManager TaskSlot 的使用情況,爲提交的應用分配相應的TaskSlot 資源並命令 TaskManager 啓動從客戶端中獲取的應用。JobManager 相當於整個集 羣的 Master 節點,且整個集羣有且只有一個活躍的 JobManager ,負責整個集羣的任務管理和資源管理。JobManager TaskManager 之間通過 Actor System 進行通信,獲取任務執行的情況並通過 Actor System 將應用的任務執行情況發送給客戶端。同時在任務執行的過程中,Flink JobManager 會觸發 Checkpoint 操作,每個 TaskManager 節點 收到Checkpoint 觸發指令後,完成 Checkpoint 操作,所有的 Checkpoint 協調過程都是在 Flink JobManager 中完成。當任務完成後,Flink 會將任務執行的信息反饋給客戶端,並且釋放掉TaskManager 中的資源以供下一次提交任務使用。
TaskManager 相當於整個集羣的 Slave 節點,負責具體的任務執行和對應任務在每個節點上的資源申請和管理。客戶端通過將編寫好的 Flink 應用編譯打包,提交到 JobManager,然後 JobManager 會根據已註冊在 JobManager TaskManager 的資源情況,
將任務分配給有資源的 TaskManager 節點,然後啓動並運行任務。TaskManager 從 JobManager 接收需要部署的任務,然後使用 Slot 資源啓動 Task,建立數據接入的網絡連接,接收數據並開始數據處理。同時 TaskManager 之間的數據交互都是通過數據流的方式進行的。可以看出,Flink 的任務運行其實是採用多線程的方式,這和 MapReduce JVM 進行的方式有很大的區別,Flink 能夠極大提高 CPU 使用效率,在多個任務和 Task 之間通過 TaskSlot 方式共享系統資源,每個 TaskManager 中通過管理多個 TaskSlot 資源池對資源進行有效管理。
 

從集羣啓動過程剖析:

JobManager的職責主要是接收Flink作業,調度Task,收集作業狀態和管理TaskManager
它包含一個 Actor,並且做如下操作:
  • RegisterTaskManager: 它由想要註冊到 JobManager TaskManager 發送。註冊成功會通過 AcknowledgeRegistration 消息進行 Ack
  • SubmitJob: 由提交作業到系統的 Client 發送。提交的信息是 JobGraph 形式的作業描述信息。
  • CancelJob: 請求取消指定 id 的作業。成功會返回 CancellationSuccess,否則返回 CancellationFailure。
  • UpdateTaskExecutionState: TaskManager 發送,用來更新執行節點(ExecutionVertex) 的狀態。成功則返回 true,否則返回 false
  • RequestNextInputSplit: TaskManager 上的Task請求下一個輸入split , 成功則返 回 NextInputSplit,否則返回 null
  • JobStatusChanged: 它意味着作業的狀態(RUNNING, CANCELING, FINISHED,)發生 變化。這個消息由 ExecutionGraph 發送。
TaskManager的啓動流程較爲簡單:
   啓動類:org.apache.flink.runtime.taskmanager.TaskManager 的核心啓動方法SelectNetworkInterfaceAndRunTaskManager啓動後直接向JobManager註冊自己,註冊完成後,進行部分模塊的初始化。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章