大資料學習之Flink(一)
Flink的核心特性:
1、高吞吐,低延遲
2、結果的準確性,提供了事件時間和處理時間,對於亂序事件流仍然提供一致且準確地結果
3、精確一次(exactly-once)的狀態一致性保證
4、可以連線到最常用的儲存系統和分散式檔案系統
5、高可用,本身高可用的設定,再加上從故障中快速恢復和動態擴充套件任務的能力,能夠做到7*24小時全天候執行
6、能夠更新應用程式程式碼並將作業遷移到不同的Flink叢集,而不會丟失應用程式的狀態
1、資料處理架構不同
spark是以批處理為根本的,並支援在批處理之上進行流計算 在本質上還是批處理(微批處理)
Flink是以流處理為根本(有界流,無界流)
2、資料模型和執行架構不同
資料模型:
Spark底層模型是彈性分散式資料集(RDD)Spark Streaming進行微批處理的底層模型是DStream,實際上還是一組組小批資料的RDD的集合
Flink計底層資料模型時資料流(DataFlow)以及實踐Event序列
執行架構:
Spark做批處理計算,需要將任務對應的DAG劃分階段,一個完成經過shuffle階段在進行下一階段的計算
Flink是標準的流式執行模式,一個事件在一個節點上處理完成後傳送給下一個節點進行處理
Flink部署模式:
會話模式(Session Mode)
單作業模式(Per-Job Mode)
應用模式(Application Mode)
它們的主要區別在於:叢集的生命週期以及資源分配方式,以及應用的main方法到底執行在客戶端還是JobManager
會話模式:先啟動一個叢集,保持一個會話,在這個會話中通過客戶端提交作業(注意:叢集啟動時所有的資源都已經確定了,所以所有提交的作業會競爭叢集中的資源)
會話模式比較適合單個規模小。執行時間短的大量作業
單作業模式:為了更好的隔離資源 考慮為每個提交的作業啟動一個叢集
注意:Flink本身無法直接這樣執行,所以單作業模式一般需要藉助資源管理平臺來啟動叢集
應用模式:無需使用客戶端,直接把應用提交到JobManager上執行,為每一個提交的任務單獨啟動一個JobManager(也就是建立一個叢集)這個JobManger只為了執行這一個應用而存在,執行結束之後JobManger也就關閉了
區別:應用模式和單作業模式 都是提交作業後再建立叢集,單作業模式是通過客戶端來提交的 客戶端解析的每一個作業對應一個叢集 二應用模式下直接由Jobmanger執行應用程式 並且即使包含多個作業也只建立一個叢集
standlone模式
yarn模式
yarn模式就是把Flink應用提交給yarn上的Resourcemanager,yarn的Resourcemanager會向yarn的NodeManager申請容器,在這些容器上Flink會部署JobManager和TaskManager的例項,從而啟動叢集。Flink會根據執行在Jobmanager上的作業所需要的slots的數量動態分配TaskManager資源
yarn模式下的部署模式:
yarn-session:會話模式 需要首先申請一個yarn會話
yarn-session.sh -d
-d:後臺執行
-jm:配置JobManger所需要的記憶體
作業提交:
1)通過web UI提交作業
2)通過命令列提交作業
flink run -c 主類名 xxxxx.jar
per-job:單作業模式
提交作業的命令:flink run -d -t yarn-per-job -c 主類名 xxxx.jar 或者 flink run -m yarn-cluster -c 主類名 xxx.jar
檢視或者取消作業的命令:
flink list -t yarn-per-job -Dyarn.application.id=application_xxxx
flink cancel -t yarn-per-job -Dyarn.application.id=application_xxxx
application:應用模式
提交作業的命令:flink run-application -t yarn-application -c 主類名 xxxxxx.jar