Apache Flink學習筆記

Apache Flink學習筆記

簡介

大數據的計算引擎分爲4代算法

第一代:Hadoop承載的MapReduce。它將計算分爲兩個階段,分別爲Map和Reduce。對於上層應用來講,就要想辦法去拆分算法,在上層應用實現多個Job串聯,完成一個完整算法。例如:迭代計算框架

第二代:支持DAG框架的計算引擎,如Tez以及更上層的Oozie。機器學習

第三代:Spark爲表明的計算引擎。特色是Job內部的DAG支持(不跨越Job),以及強調的實時計算。分佈式

第四代:Flink對流計算的支持,也能夠支持Batch任務以及DAG的運算。oop

須要體會各個框架的差別,以及更適合的場景。並進行理解,沒有哪個框架能夠完美的支持全部的場景,也就不可能有任何一個框架可以徹底取代另外一個。就像Spark沒有取代Hadoop,Flink也不可能取代Spark。學習

Flink是一個針對流數據和批數據的分佈式處理引擎。主要是由Java代碼實現,目前還依靠開源社區的貢獻發展。對Flink而言,所要處理的主要場景就是流數據。會把全部任務當作流來處理,也是最大的特色。測試

能夠支持本地的快速迭代,以及一些環形的迭代任務。而且Flink能夠定製化內存管理。就框架自己與應用場景來講,Flink更類似與Storm。大數據

Client用來提交任務給JobManagerorm

JobManager分發任務給TaskManager去執行,而後TaskManager會心跳的彙報任務狀態。blog

Flink調度簡述

在Flink集羣中,計算資源被定義爲Task Slot。每一個TaskManager會擁有一個或多個Slots。JobManager會以Slot爲單位調度Task。但這裏的Task跟咱們在Hadoop中的理解是有區別的。對Flink的JobManager來講,其調度的是一個Pipeline的Task,而不是一個點。

在Hadoop中Map和Reduce是兩個獨立調度的Task,而且都會去佔用計算資源。對Flink來講MapReduce是一個Pipeline的Task,只佔用一個計算資源。

在TaskManager中,根據其所擁有的Slot個數,同時會擁有多個Pipeline

由於Flink自身也須要簡單的管理計算資源(Slot)。當Flink部署在Yarn上面以後,Flink並無弱化資源管理。也就是說這時候的Flink再作一些Yarn該作的事情。

生態圈

Flink支持Scala和Java的API,Python在測試中。Flink經過Gelly支持了圖操做,還有機器學習的FlinkML。Table是一種接口化的SQL支持,也就是API支持,而不是文本化的SQL解析和執行。

部署

Flink有三種部署模型,分別是Local,Standalone Cluster和Yarn Cluster。對於Local模式來講,JobManager和TaskManager會公用一個JVM來完成Workload。若是要驗證簡單的應用,Local模式是最方便的。實際應用中大多數使用Standalone或者Yarn Cluster

Standalone模式

搭建Standalone模式的Flink集羣以前,須要先下載Flink安裝包。

須要指定Master和Worker。Master機器會啓動JobManager,Worker則會啓動TaskManager。

須要修改conf目錄中的master和slaves。在配置master文件時,須要指定JobManager的UI監聽端口。

JobManager只需配置一個,Worker則需配置一個或多個。

在conf目錄中找到文件flink-conf.yaml。文件中定義了Flink各個模塊的基本屬性,如RPC的端口。JobManager和TaskManager堆的大小等。通常只須要修改taskmanager.numberOfTaskSlots,擁有Slot個數。通常設置成CPU的core數。

Yarn Cluster模式

爲了最大化利用集羣資源,會在一個集羣中同時運行多種類型的Workload。所以Flink也支持在Yarn上面運行。

 

 

 

 

 

 

 

#

相關文章
相關標籤/搜索