偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

聊聊流計(jì)算的兩個(gè)數(shù)據(jù)處理引擎:Spark 和 Flink

大數(shù)據(jù) 數(shù)據(jù)分析
談到大數(shù)據(jù),流計(jì)算的重要性和它實(shí)時(shí)支持的強(qiáng)大分析是不可回避的。說到流計(jì)算,也離不開該領(lǐng)域最強(qiáng)大的兩個(gè)數(shù)據(jù)處理引擎:Spark 和 Flink。

背景

談到大數(shù)據(jù),流計(jì)算的重要性和它實(shí)時(shí)支持的強(qiáng)大分析是不可回避的。說到流計(jì)算,也離不開該領(lǐng)域最強(qiáng)大的兩個(gè)數(shù)據(jù)處理引擎:Spark 和 Flink。Spark和Flink都支持批處理和流處理,接下來讓我們對這兩種流行的數(shù)據(jù)處理框架在各方面進(jìn)行對比。

  • 批處理的特點(diǎn)是有界、持久、大量,非常適合需要訪問全套記錄才能完成的計(jì)算工作,一般用于離線統(tǒng)計(jì)。
  • 流處理的特點(diǎn)是無界、實(shí)時(shí), 無需針對整個(gè)數(shù)據(jù)集執(zhí)行操作,而是對通過系統(tǒng)傳輸?shù)拿總€(gè)數(shù)據(jù)項(xiàng)執(zhí)行操作,一般用于實(shí)時(shí)統(tǒng)計(jì)。

Flink

介紹

Apache Flink是由Apache軟件基金會(huì)開發(fā)的開源流處理框架,其核心是用Java和Scala編寫的分布式流數(shù)據(jù)流引擎。Flink以數(shù)據(jù)并行和流水線方式執(zhí)行任意流數(shù)據(jù)程序,F(xiàn)link的流水線運(yùn)行時(shí)系統(tǒng)可以執(zhí)行批處理和流處理程序。此外,F(xiàn)link的運(yùn)行時(shí)本身也支持迭代算法的執(zhí)行。Flink在實(shí)現(xiàn)流處理和批處理時(shí),與傳統(tǒng)的一些方案完全不同,它從另一個(gè)視角看待流處理和批處理,將二者統(tǒng)一起來:Flink是完全支持流處理,也就是說作為流處理看待時(shí)輸入數(shù)據(jù)流是無界的;批處理被作為一種特殊的流處理,只是它的輸入數(shù)據(jù)流被定義為有界的。在Flink被apache提升為頂級項(xiàng)目之后,阿里實(shí)時(shí)計(jì)算團(tuán)隊(duì)決定在阿里內(nèi)部建立一個(gè) Flink 分支 Blink,并對 Flink 進(jìn)行大量的修改和完善,讓其適應(yīng)阿里巴巴這種超大規(guī)模的業(yè)務(wù)場景。

特點(diǎn)

  • 支持高吞吐、低延遲、高性能的流處理
  • 有狀態(tài)計(jì)算的Exactly-once語義,對于一條message,receiver確保只收到一次
  • 支持帶有事件時(shí)間(event time)的流處理和窗口處理。事件時(shí)間的語義使流計(jì)算的結(jié)果更加精確,尤其在事件到達(dá)無序或者延遲的情況下。
  • 支持高度靈活的窗口(window)操作。支持基于time、count、session,以及data-driven的窗口操作,能很好的對現(xiàn)實(shí)環(huán)境中的創(chuàng)建的數(shù)據(jù)進(jìn)行建模。
  • 輕量的容錯(cuò)處理( fault tolerance)。 它使得系統(tǒng)既能保持高的吞吐率又能保證exactly-once的一致性。通過輕量的state snapshots實(shí)現(xiàn)
  • 支持機(jī)器學(xué)習(xí)(FlinkML)、圖分析(Gelly)、關(guān)系數(shù)據(jù)處理(Table)、復(fù)雜事件處理(CEP)
  • 支持savepoints 機(jī)制(一般手動(dòng)觸發(fā))。即可以將應(yīng)用的運(yùn)行狀態(tài)保存下來;在升級應(yīng)用或者處理歷史數(shù)據(jù)是能夠做到無狀態(tài)丟失和最小停機(jī)時(shí)間。
  • 支持大規(guī)模的集群模式,支持yarn、Mesos??蛇\(yùn)行在成千上萬的節(jié)點(diǎn)上
  • Flink在JVM內(nèi)部實(shí)現(xiàn)了自己的內(nèi)存管理
  • 支持迭代計(jì)算
  • 支持程序自動(dòng)優(yōu)化:避免特定情況下Shuffle、排序等昂貴操作,中間結(jié)果進(jìn)行緩存
  • API支持,對Streaming數(shù)據(jù)類應(yīng)用,提供DataStream API,對批處理類應(yīng)用,提供DataSet API(支持Java/Scala)
  • 支持Flink on YARN、HDFS、Kafka、HBase、Hadoop、ElasticSearch、Storm、S3等整合

架構(gòu)

系統(tǒng)組件

Flink的架構(gòu)體系同樣也遵行分層架構(gòu)設(shè)計(jì)的理念,基本上分為三層,API&Libraries層、Runtine核心層以及物理部署層。

  • API&Libraries層:提供了支撐流計(jì)算和批計(jì)算的接口,同時(shí)在此基礎(chǔ)之上抽象出不同的應(yīng)用類型的組件庫。
  • Runtime 核心層:負(fù)責(zé)對上層不同接口提供基礎(chǔ)服務(wù),支持分布式Stream作業(yè)的執(zhí)行、JobGraph到ExecutionGraph 的映射轉(zhuǎn)換、任務(wù)調(diào)度等,將DataStream和DataSet轉(zhuǎn)成統(tǒng)一的可執(zhí)行的Task Operator.
  • 物理部署層:Flink 支持多種部署模式,本機(jī),集群(Standalone/YARN)、云(GCE/EC2)、Kubenetes。

系統(tǒng)架構(gòu)

當(dāng) Flink 集群啟動(dòng)后,首先會(huì)啟動(dòng)一個(gè) JobManger 和一個(gè)或多個(gè)的 TaskManager。由 Client 提交任務(wù)給 JobManager,JobManager 再調(diào)度任務(wù)到各個(gè) TaskManager 去執(zhí)行,然后 TaskManager 將心跳和統(tǒng)計(jì)信息匯報(bào)給 JobManager。TaskManager 之間以流的形式進(jìn)行數(shù)據(jù)的傳輸。上述三者均為獨(dú)立的 JVM 進(jìn)程。

  • Client 為提交 Job 的客戶端,可以是運(yùn)行在任何機(jī)器上(與 JobManager 環(huán)境連通即可)。提交 Job 后,Client 可以結(jié)束進(jìn)程(Streaming的任務(wù)),也可以不結(jié)束并等待結(jié)果返回。
  • JobManager 主要負(fù)責(zé)調(diào)度 Job 并協(xié)調(diào) Task 做 checkpoint,職責(zé)上很像 Storm 的 Nimbus。從 Client 處接收到 Job 和 JAR 包等資源后,會(huì)生成優(yōu)化后的執(zhí)行計(jì)劃,并以 Task 的單元調(diào)度到各個(gè) TaskManager 去執(zhí)行。
  • TaskManager 在啟動(dòng)的時(shí)候就設(shè)置好了槽位數(shù)(Slot),每個(gè) slot 能啟動(dòng)一個(gè) Task,Task 為線程。從 JobManager 接收需要部署的 Task,部署啟動(dòng)后,與自己的上游建立 Netty 連接,接收數(shù)據(jù)并處理。

Spark

介紹

Spark是一種快速、通用、可擴(kuò)展的大數(shù)據(jù)分析引擎,2009年誕生于加州大學(xué)伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化項(xiàng)目,2014年2月成為Apache頂級項(xiàng)目。項(xiàng)目是用Scala進(jìn)行編寫。目前,Spark生態(tài)系統(tǒng)已經(jīng)發(fā)展成為一個(gè)包含多個(gè)子項(xiàng)目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子項(xiàng)目,Spark是基于內(nèi)存計(jì)算的大數(shù)據(jù)并行計(jì)算框架。

特點(diǎn)

  • 輕量級快速處理 :Spark允許傳統(tǒng)Hadoop集群中的應(yīng)用程序在內(nèi)存中以100倍的速度運(yùn)行,即使在磁盤上運(yùn)行也能快10倍。Spark通過減少磁盤IO來達(dá)到性能的提升,提供 Cache 機(jī)制來支持需要反復(fù)迭代計(jì)算或者多次數(shù)據(jù)共享,減少數(shù)據(jù)讀取的 IO 開銷;
  • 易于使用 :Spark支持多語言。Spark允許Java、Scala、Python及R
  • 支持復(fù)雜查詢 :除了簡單的map及reduce操作之外,Spark還支持filter、foreach、reduceByKey、aggregate以及SQL查詢、流式查詢等復(fù)雜查詢
  • 實(shí)時(shí)的流處理 :對比MapReduce只能處理離線數(shù)據(jù),Spark還能支持實(shí)時(shí)流計(jì)算。SparkStreaming主要用來對數(shù)據(jù)進(jìn)行實(shí)時(shí)處理,當(dāng)然在YARN之后Hadoop也可以借助其他的工具進(jìn)行流式計(jì)算
  • 通用解決方案:Spark提供了統(tǒng)一的解決方案。Spark可以用于批處理、交互式查詢(Spark SQL)、實(shí)時(shí)流處理(Spark Streaming)、機(jī)器學(xué)習(xí)(Spark MLlib)和圖計(jì)算(GraphX)
  • 與其他開源產(chǎn)品集成:Spark可以使用Hadoop的YARN、Apache Mesos(已經(jīng)啟用)、Kubernetes作為它的資源管理和調(diào)度器,并且可以處理所有Hadoop支持的數(shù)據(jù),包括HDFS、HBase和Cassandra等

架構(gòu)

生態(tài)組件

Spark 生態(tài)系統(tǒng)以Spark Core 為核心,能夠讀取傳統(tǒng)文件(如文本文件)、HDFS、Amazon S3、Alluxio 和NoSQL 等數(shù)據(jù)源,利用Standalone、YARN 和Mesos 等資源調(diào)度管理,完成應(yīng)用程序分析與處理,這些應(yīng)用程序來自Spark 的不同組件,如Spark Shell 或Spark Submit 交互式批處理方式、Spark Streaming 的實(shí)時(shí)流處理應(yīng)用、Spark SQL 的即席查詢、采樣近似查詢引擎BlinkDB 的權(quán)衡查詢、MLbase/MLlib 的機(jī)器學(xué)習(xí)、GraphX 的圖處理和SparkR 的數(shù)學(xué)計(jì)算等

系統(tǒng)組件

整個(gè) Spark 集群中,分為 Master 節(jié)點(diǎn)與 worker 節(jié)點(diǎn),,其中 Master 節(jié)點(diǎn)上常駐 Master 守護(hù)進(jìn)程和 Driver 進(jìn)程, Master 負(fù)責(zé)將串行任務(wù)變成可并行執(zhí)行的任務(wù)集Tasks, 同時(shí)還負(fù)責(zé)出錯(cuò)問題處理等,而 Worker 節(jié)點(diǎn)上常駐 Worker 守護(hù)進(jìn)程, Master 節(jié)點(diǎn)與 Worker 節(jié)點(diǎn)分工不同, Master 負(fù)載管理全部的 Worker 節(jié)點(diǎn),而 Worker 節(jié)點(diǎn)負(fù)責(zé)執(zhí)行任務(wù)。

Spark的架構(gòu)中的基本組件:

Cluster Manager:在standalone模式中即為Master主節(jié)點(diǎn),控制整個(gè)集群,監(jiān)控worker。在YARN模式中為資源管理器

Worker:從節(jié)點(diǎn),負(fù)責(zé)控制計(jì)算節(jié)點(diǎn),啟動(dòng)Executor或者Driver。在YARN模式中為NodeManager,負(fù)責(zé)計(jì)算節(jié)點(diǎn)的控制。

Driver:運(yùn)行Application的main()函數(shù)并創(chuàng)建SparkContext。

Executor:執(zhí)行器,在worker node上執(zhí)行任務(wù)的組件、用于啟動(dòng)線程池運(yùn)行任務(wù)。每個(gè)Application擁有獨(dú)立的一組Executor。

SparkContext:整個(gè)應(yīng)用的上下文,控制應(yīng)用的生命周期。

  • RDD:Spark的基礎(chǔ)計(jì)算單元,一組RDD可形成執(zhí)行的有向無環(huán)圖RDD Graph。
  • DAG Scheduler:根據(jù)作業(yè)(task)構(gòu)建基于Stage的DAG,并提交Stage給TaskScheduler。
  • TaskScheduler:將任務(wù)(task)分發(fā)給Executor執(zhí)行。
  • SparkEnv:線程級別的上下文, 存儲(chǔ)運(yùn)行時(shí)的重要組件的引用。

執(zhí)行流程

  • 構(gòu)建 Spark Application 的運(yùn)行環(huán)境(啟動(dòng) SparkContext),SparkContext 向 Cluster Manager 注冊,并申請運(yùn)行 Executor 資源。
  • Cluster Manager 為 Executor 分配資源并啟動(dòng) Executor 進(jìn)程,Executor 運(yùn)行情況將隨著“心跳”發(fā)送到 Cluster Manager 上。
  • SparkContext 構(gòu)建 DAG 圖,將 DAG 圖分解成多個(gè) Stage,并把每個(gè) Stage 的 TaskSet(任務(wù)集)發(fā)送給 Task Scheduler (任務(wù)調(diào)度器)。Executor 向 SparkContext 申請 Task, Task Scheduler 將 Task 發(fā)放給 Executor,同時(shí),SparkContext 將應(yīng)用程序代碼發(fā)放給 Executor。
  • Task 在 Executor 上運(yùn)行,把執(zhí)行結(jié)果反饋給 Task Scheduler,然后再反饋給 DAG Scheduler。運(yùn)行完畢后寫入數(shù)據(jù),SparkContext 向 ClusterManager 注銷并釋放所有資源。

總結(jié)

Spark 和 Flink 都是通用的能夠支持超大規(guī)模數(shù)據(jù)處理,支持各種處理類型的計(jì)算引擎。在spark的世界觀中,一切都是由批次組成的,離線數(shù)據(jù)是一個(gè)大批次,而實(shí)時(shí)數(shù)據(jù)是由一個(gè)一個(gè)無限的小批次組成的。而在flink的世界觀中,一切都是由流組成的,離線數(shù)據(jù)是有界限的流,實(shí)時(shí)數(shù)據(jù)是一個(gè)沒有界限的流,這就是所謂的有界流和無界流。Apache Spark 和 Flink 都是備受業(yè)界關(guān)注的大數(shù)據(jù)工具。兩者都提供與 Hadoop 和 NoSQL 數(shù)據(jù)庫的集成,并且可以處理 HDFS 數(shù)據(jù)。但由于其底層架構(gòu),F(xiàn)link 比 Spark 更快。Spark流處理的實(shí)時(shí)性還不夠,所以無法用在一些對實(shí)時(shí)性要求很高的流處理場景中。這是因?yàn)? Spark的流處理是基于所謂微批處理( Micro- batch processing)的思想,即它把流處理看作是批處理的一種特殊形式,每次接收到一個(gè)時(shí)間間隔的數(shù)據(jù)才會(huì)去處理,所以天生很難在實(shí)時(shí)性上有所提升。采用了基于操作符(Operator)的連續(xù)流模型,可以做到微秒級別的延遲。

從流處理的角度來講,Spark基于微批量處理,把流數(shù)據(jù)看成是一個(gè)個(gè)小的批處理數(shù)據(jù)塊分別處理,所以延遲性只能做到秒級。而Flink基于每個(gè)事件處理,每當(dāng)有新的數(shù)據(jù)輸入都會(huì)立刻處理,是真正的流式計(jì)算,支持毫秒級計(jì)算。由于相同的原因,Spark只支持基于時(shí)間的窗口操作(處理時(shí)間或者事件時(shí)間),而Flink支持的窗口操作則非常靈活,不僅支持時(shí)間窗口,還支持基于數(shù)據(jù)本身的窗口(另外還支持基于time、count、session,以及data-driven的窗口操作),開發(fā)者可以自由定義想要的窗口操作。

從SQL 功能的角度來講,Spark和Flink分別提供SparkSQL和Table APl提供SQL交互支持。兩者相比較,Spark對SQL支持更好,相應(yīng)的優(yōu)化、擴(kuò)展和性能更好,而Flink在SQL支持方面還有很大提升空間。

從迭代計(jì)算的角度來講,Spark對機(jī)器學(xué)習(xí)的支持很好,因?yàn)榭梢栽趦?nèi)存中緩存中間計(jì)算結(jié)果來加速機(jī)器學(xué)習(xí)算法的運(yùn)行。但是大部分機(jī)器學(xué)習(xí)算法其實(shí)是一個(gè)有環(huán)的數(shù)據(jù)流,在Spark中,卻是用無環(huán)圖來表示。而Flink支持在運(yùn)行時(shí)間中的有環(huán)數(shù)據(jù)流,從而可以更有效的對機(jī)器學(xué)習(xí)算法進(jìn)行運(yùn)算。

從相應(yīng)的生態(tài)系統(tǒng)角度來講,Spark 的社區(qū)無疑更加活躍。Spark可以說有著Apache旗下最多的開源貢獻(xiàn)者,而且有很多不同的庫來用在不同場景。而Flink由于較新,現(xiàn)階段的開源社區(qū)不如Spark活躍,各種庫的功能也不如Spark全面。但是Flink還在不斷發(fā)展,各種功能也在逐漸完善。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2018-07-25 15:31:51

SparkFlink大數(shù)據(jù)

2020-04-14 15:18:16

SparkFlink框架

2023-07-31 08:21:22

語法校對器Pick

2025-01-14 08:59:16

2010-04-08 13:55:18

Oracle數(shù)據(jù)處理

2020-11-02 15:56:04

大數(shù)據(jù)數(shù)據(jù)庫技術(shù)

2023-09-26 09:29:08

Java數(shù)據(jù)

2025-03-18 07:10:00

人工智能模型神經(jīng)網(wǎng)絡(luò)

2020-05-14 13:40:40

SparkFlink大數(shù)據(jù)

2021-07-29 10:47:51

Flink on Ze流計(jì)算

2021-07-20 15:37:37

數(shù)據(jù)開發(fā)大數(shù)據(jù)Spark

2020-09-29 08:35:08

MongoDBPython數(shù)據(jù)

2021-08-11 12:07:12

PythonPgSQL數(shù)據(jù)

2020-09-27 08:36:21

Python Memcached緩存

2023-12-13 10:22:04

APISpark數(shù)據(jù)

2020-09-24 06:49:34

PythonRedis

2019-11-29 15:47:42

HadoopSparkFlink

2024-09-11 14:47:00

2019-11-06 10:43:20

HBaseSpark數(shù)據(jù)處理平臺(tái)

2022-07-24 09:56:40

大數(shù)據(jù)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號