主頁 > 軟體設計 > 大資料面試題之葵花寶典------Flink高級

大資料面試題之葵花寶典------Flink高級

2020-09-10 16:10:39 軟體設計

葵花寶典------Flink高級

        • 1、Flink Job的提交流程
        • 2、Flink所謂"三層圖"結構是哪幾個"圖"?
        • 3、JobManger在集群中扮演了什么角色?
        • 4、JobManger在集群啟動程序中起到什么作用?
        • 5、TaskManager在集群中扮演了什么角色?
        • 6、TaskManager在集群啟動程序中起到什么作用?
        • 7、Flink 計算資源的調度是如何實作的?
        • 8、簡述Flink的資料抽象及資料交換程序?
        • 9、Flink 中的分布式快斬訓制是如何實作的?
        • 10、簡單說說FlinkSQL的是如何實作的?

1、Flink Job的提交流程

用戶提交的Flink Job會被轉化成一個DAG任務運行,分別是:StreamGraph、JobGraph、ExecutionGraph,Flink中JobManager與TaskManager,JobManager與Client的互動是基于Akka工具包的,是通過訊息驅動,整個Flink Job的提交還包含著ActorSystem的創建,JobManager的啟動,TaskManager的啟動和注冊,

2、Flink所謂"三層圖"結構是哪幾個"圖"?

一個Flink任務的DAG生成計算圖大致經歷以下三個程序:
1、StreamGraph 最接近代碼所表達的邏輯層面的計算拓撲結構,按照用戶代碼的執行順序向StreamExecutionEnvironment添加StreamTransformation構成流式圖,
2、JobGraph 從StreamGraph生成,將可以串聯合并的節點進行合并,設定節點之間的邊,安排資源共享slot槽位和放置相關聯的節點,上傳任務所需的檔案,設定檢查點配置等,相當于經過部分初始化和優化處理的任務圖,
3、ExecutionGraph 由JobGraph轉換而來,包含了任務具體執行所需的內容,是最貼近底層實作的執行圖

3、JobManger在集群中扮演了什么角色?

JobManager 負責整個 Flink 集群任務的調度以及資源的管理,從客戶端中獲取提交的應用,然后根據集群中 TaskManager 上 TaskSlot 的使用情況,為提交的應用分配相應的 TaskSlot 資源并命令 TaskManager 啟動從客戶端中獲取的應用,JobManager 相當于整個集群的 Master 節點,且整個集群有且只有一個活躍的 JobManager ,負責整個集群的任務管理和資源管理,JobManager 和 TaskManager 之間通過 Actor System 進行通信,獲取任務執行的情況并通過 Actor System 將應用的任務執行情況發送給客戶端,同時在任務執行的程序中,Flink JobManager 會觸發 Checkpoint 操作,每個 TaskManager 節點 收到 Checkpoint 觸發指令后,完成 Checkpoint 操作,所有的 Checkpoint 協調程序都是在 Fink JobManager 中完成,當任務完成后,Flink 會將任務執行的資訊反饋給客戶端,并且釋放掉 TaskManager 中的資源以供下一次提交任務使用,

4、JobManger在集群啟動程序中起到什么作用?

JobManager的職責主要是接收Flink作業,調度Task,收集作業狀態和管理TaskManager,它包含一個Actor,并且做如下操作:
1、RegisterTaskManager: 它由想要注冊到JobManager的TaskManager發送,注冊成功會通過AcknowledgeRegistration訊息進行Ack,
2、SubmitJob: 由提交作業到系統的Client發送,提交的資訊是JobGraph形式的作業描述資訊,
3、CancelJob: 請求取消指定id的作業,成功會回傳CancellationSuccess,否則回傳CancellationFailure,
4、UpdateTaskExecutionState: 由TaskManager發送,用來更新執行節點(ExecutionVertex)的狀態,成功則回傳true,否則回傳false,
5、RequestNextInputSplit: TaskManager上的Task請求下一個輸入split,成功則回傳NextInputSplit,否則回傳null,
6、JobStatusChanged: 它意味著作業的狀態(RUNNING, CANCELING, FINISHED,等)發生變化,這個訊息由ExecutionGraph發送,

5、TaskManager在集群中扮演了什么角色?

TaskManager 相當于整個集群的 Slave 節點,負責具體的任務執行和對應任務在每個節點上的資源申請和管理,客戶端通過將撰寫好的 Flink 應用編譯打包,提交到 JobManager,然后 JobManager 會根據已注冊在 JobManager 中 TaskManager 的資源情況,將任務分配給有資源的 TaskManager節點,然后啟動并運行任務,TaskManager 從 JobManager 接收需要部署的任務,然后使用 Slot 資源啟動 Task,建立資料接入的網路連接,接收資料并開始資料處理,同時 TaskManager 之間的資料互動都是通過資料流的方式進行的,可以看出,Flink 的任務運行其實是采用多執行緒的方式,這和 MapReduce 多 JVM 進行的方式有很大的區別,Flink 能夠極大提高 CPU 使用效率,在多個任務和 Task 之間通過 TaskSlot 方式共享系統資源,每個 TaskManager 中通過管理多個 TaskSlot 資源池進行對資源進行有效管理,

6、TaskManager在集群啟動程序中起到什么作用?

TaskManager的啟動流程較為簡單:
啟動類:org.apache.flink.runtime.taskmanager.TaskManager
核心啟動方法 : selectNetworkInterfaceAndRunTaskManager
啟動后直接向JobManager注冊自己,注冊完成后,進行部分模塊的初始化,

7、Flink 計算資源的調度是如何實作的?

1、TaskManager中最細粒度的資源是Task slot,代表了一個固定大小的資源子集,每個TaskManager會將其所占有的資源平分給它的slot,
2、通過調整 task slot 的數量,用戶可以定義task之間是如何相互隔離的,每個 TaskManager 有一個slot,也就意味著每個task運行在獨立的 JVM 中,每個 TaskManager 有多個slot的話,也就是說多個task運行在同一個JVM中,
3、而在同一個JVM行程中的task,可以共享TCP連接(基于多路復用)和心跳訊息,可以減少資料的網路傳輸,也能共享一些資料結構,一定程度上減少了每個task的消耗, 每個slot可以接受單個task,也可以接受多個連續task組成的pipeline,如下圖所示,FlatMap函式占用一個taskslot,而key Agg函式和sink函式共用一個taskslot:
在這里插入圖片描述

8、簡述Flink的資料抽象及資料交換程序?

Flink 為了避免JVM的固有缺陷例如java物件存盤密度低,FGC影響吞吐和回應等,實作了自主管理記憶體,MemorySegment就是Flink的記憶體抽象,默認情況下,一個MemorySegment可以被看做是一個32kb大的記憶體塊的抽象,這塊記憶體既可以是JVM里的一個byte[],也可以是堆外記憶體(DirectByteBuffer),在MemorySegment這個抽象之上,Flink在資料從operator內的資料物件在向TaskManager上轉移,預備被發給下個節點的程序中,使用的抽象或者說記憶體物件是Buffer,對接從Java物件轉為Buffer的中間物件是另一個抽象StreamRecord,

9、Flink 中的分布式快斬訓制是如何實作的?

Flink的容錯機制的核心部分是制作分布式資料流和操作算子狀態的一致性快照, 這些快照充當一致性checkpoint,系統可以在發生故障時回滾, Flink用于制作這些快照的機制在“分布式資料流的輕量級異步快照”中進行了描述, 它受到分布式快照的標準Chandy-Lamport演算法的啟發,專門針對Flink的執行模型而定制,
在這里插入圖片描述

barriers在資料流源處被注入并行資料流中,快照n的barriers被插入的位置(我們稱之為Sn)是快照所包含的資料在資料源中最大位置,例如,在Apache Kafka中,此位置將是磁區中最后一條記錄的偏移量, 將該位置Sn報告給checkpoint協調器(Flink的JobManager),然后barriers向下游流動,當一個中間操作算子從其所有輸入流中收到快照n的barriers時,它會為快照n發出barriers進入其所有輸出流中, 一旦sink操作算子(流式DAG的末端)從其所有輸入流接收到barriers n,它就向checkpoint協調器確認快照n完成,在所有sink確認快照后,意味快照著已完成,一旦完成快照n,job將永遠不再向資料源請求Sn之前的記錄,因為此時這些記錄(及其后續記錄)將已經通過整個資料流拓撲,也即是已經被處理結束,

10、簡單說說FlinkSQL的是如何實作的?

Flink 將 SQL 校驗、SQL 決議以及 SQL 優化交給了Apache Calcite,Calcite 在其他很多開源專案里也都應用到了,譬如 Apache Hive, Apache Drill, Apache Kylin, Cascading,Calcite 在新的架構中處于核心的地位,如下圖所示,
在這里插入圖片描述

構建抽象語法樹的事情交給了 Calcite 去做,SQL query 會經過 Calcite 決議器轉變成 SQL 節點樹,通過驗證后構建成 Calcite 的抽象語法樹(也就是圖中的 Logical Plan),另一邊,Table API 上的呼叫會構建成 Table API 的抽象語法樹,并通過 Calcite 提供的 RelBuilder 轉變成 Calcite 的抽象語法樹,然后依次被轉換成邏輯執行計劃和物理執行計劃,在提交任務后會分發到各個 TaskManager 中運行,在運行時會使用 Janino 編譯器編譯代碼后運行,

大資料面試題之葵花寶典------Hadoop
大資料面試題之葵花寶典------flume
大資料面試題之葵花寶典------Flink初級
大資料面試題之葵花寶典------Flink中級

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/2659.html

標籤:其他

上一篇:VSCode代碼自動補全html標簽、css屬性及值 - 無插件

下一篇:理論+實驗:MySQL資料庫基本概念和介紹

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more