色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Spark和Flink的技術與場景進行全面分析與對比

DPVg_AI_era ? 來源:未知 ? 作者:李倩 ? 2018-08-01 09:00 ? 次閱讀

一提到大數據,多半繞不開Spark 和 Flink。Spark用一個統一的引擎支持批處理、流處理、交互式查詢、機器學習等常見的數據處理場景,適應性極廣,但數據流計算上表現稍弱,而Flink的出現很好地彌補了這一不足。本文對 Spark 和 Flink 的技術與場景進行了全面分析與對比,且看下一代大數據計算引擎之爭,誰主沉浮?

下一代大數據計算引擎

自從數據處理需求超過了傳統數據庫能有效處理的數據量之后,Hadoop 等各種基于 MapReduce 的海量數據處理系統應運而生。從 2004 年 Google 發表 MapReduce 論文開始,經過近 10 年的發展,基于 Hadoop 開源生態或者其它相應系統的海量數據處理已經成為業界的基本需求。

但是,很多機構在開發自己的數據處理系統時都會發現需要面臨一系列的問題。從數據中獲取價值需要的投入遠遠超過預期。常見的問題包括:

非常陡峭的學習曲線。剛接觸這個領域的人經常會被需要學習的技術的數量砸暈。不像經過幾十年發展的數據庫一個系統可以解決大部分數據處理需求,Hadoop 等大數據生態里的一個系統往往在一些數據處理場景上比較擅長,另一些場景湊合能用,還有一些場景完全無法滿足需求。結果就是需要好幾個系統來處理不同的場景。

(來源:https://mapr.com/developercentral/lambda-architecture/)

上圖是一個典型的 lambda 架構,只是包含了批處理和流處理兩種場景,就已經牽涉到至少四五種技術了,還不算每種技術的可替代選擇。再加上實時查詢、交互式分析、機器學習等場景,每個場景都有幾種技術可以選擇,每個技術涵蓋的領域還有不同方式的重疊。結果就是一個業務經常需要使用四五種以上的技術才能支持好一個完整的數據處理流程。加上調研選型,需要了解的數目還要多得多。

下圖是大數據領域的全景。暈了沒?

2018 大數據和 AI 全景

開發和運行效率低下。因為牽涉到多種系統,每種系統有自己的開發語言和工具,開發效率可想而知。而因為采用了多套系統,數據需要在各個系統之間傳輸,也造成了額外的開發和運行代價,數據的一致也難以保證。在很多機構,實際上一半以上的開發精力花在了數據在各個系統之間的傳輸上。

復雜的運維。多個系統,每個需要自己的運維,帶來更高的運維代價的同時也提高了系統出問題的可能。

數據質量難以保證。數據出了問題難以跟蹤解決。

最后,還有人的問題。在很多機構,由于系統的復雜性,各個子系統的支持和使用落實在不同部門負責。

了解了這些問題以后,對 Spark 從 2014 年左右開始迅速流行就比較容易理解了。Spark 在當時除了在某些場景比 Hadoop MapReduce 帶來幾十到上百倍的性能提升外,還提出了用一個統一的引擎支持批處理、流處理、交互式查詢、機器學習等常見的數據處理場景。看過在一個 Notebook 里完成上述所有場景的 Spark 演示,對比之前的數據流程開發,對很多開發者來說不難做出選擇。經過幾年的發展,Spark 已經被視為可以完全取代 Hadoop 中的 MapReduce 引擎。

正在 Spark 如日中天高速發展的時候,2016 年左右 Flink 開始進入大眾的視野并逐漸廣為人知。為什么呢?原來在人們開始使用 Spark 之后,發現 Spark 雖然支持各種常見場景,但并不是每一種都同樣好用。數據流的實時處理就是其中相對較弱的一環。Flink 憑借更優的流處理引擎,同時也支持各種處理場景,成為 Spark 的有力挑戰者。

Spark 和 Flink 是怎么做到這些的,它們之間又有那些異同,下面我們來具體看一下。

Spark和Flink的引擎技術

這一部分主要著眼于 Spark 和 Flink 引擎的架構方面,更看重架構帶來的潛力和限制。現階段的實現成熟度和局限會在后續生態部分探討。

數據模型和處理模型

要理解 Spark 和 Flink 的引擎特點,首先從數據模型開始。

Spark 的數據模型是彈性分布式數據集 RDD(Resilient Distributed Datasets)。 比起 MapReduce 的文件模型,RDD 是一個更抽象的模型,RDD 靠血緣(lineage) 等方式來保證可恢復性。很多時候 RDD 可以實現為分布式共享內存或者完全虛擬化(即有的中間結果 RDD 當下游處理完全在本地時可以直接優化省略掉)。這樣可以省掉很多不必要的 I/O,是早期 Spark 性能優勢的主要原因。

Spark 用 RDD 上的變換(算子)來描述數據處理。每個算子(如 map,filter,join)生成一個新的 RDD。所有的算子組成一個有向無環圖(DAG)。Spark 比較簡單地把邊分為寬依賴和窄依賴。上下游數據不需要 shuffle 的即為窄依賴,可以把上下游的算子放在一個階段(stage) 里在本地連續處理,這時上游的結果 RDD 可以 省略。下圖展示了相關的基本概念。更詳細的介紹在網上比較容易找到,這里就不花太多篇幅了。

Spark DAG

(來源:http://datastrophic.io/core-concepts-architecture-and-internals-of-apache-spark/)

Flink 的基本數據模型是數據流,及事件(Event)的序列。數據流作為數據的基本模型可能沒有表或者數據塊直觀熟悉,但是可以證明是完全等效的。流可以是無邊界的無限流,即一般意義上的流處理。也可以是有邊界的有限流,這樣就是批處理。

Flink 用數據流上的變換(算子)來描述數據處理。每個算子生成一個新的數據流。在算子,DAG,和上下游算子鏈接(chaining) 這些方面,和 Spark 大致等價。Flink 的節點(vertex)大致相當于 Spark 的階段(stage),劃分也會和上圖的 Spark DAG 基本一樣。

Flink 任務圖(來源:https://ci.apache.org/projects/flink/flink-docs-release-1.5/concepts/runtime.html)

在 DAG 的執行上,Spark 和 Flink 有一個比較顯著的區別。在 Flink 的流執行模式中,一個事件在一個節點處理完后的輸出就可以發到下一個節點立即處理。這樣執行引擎并不會引入額外的延遲。與之相應的,所有節點是需要同時運行的。而 Spark 的 micro batch 和一般的 batch 執行一樣,處理完上游的 stage 得到輸出之后才開始下游的 stage。

在 Flink 的流執行模式中,為了提高效率也可以把多個事件放在一起傳輸或者計算。但這完全是執行時的優化,可以在每個算子獨立決定,也不用像 RDD 等批處理模型中一樣和數據集邊界綁定,可以做更加靈活的優化同時可以兼顧低延遲需求。

Flink 使用異步的 checkpoint 機制來達到任務狀態的可恢復性,以保證處理的一致性,所以在處理的主流程上可以做到數據源和輸出之間數據完全不用落盤,達到更高的性能和更低的延遲。

數據處理場景

除了批處理之外,Spark 還支持實時數據流處理、交互式查詢和機器學習、圖計算等。

(來源: https://databricks.com/spark/about)

實時數據流處理和批處理主要區別就是對低延時的要求。Spark 因為 RDD 是基于內存的,可以比較容易切成較小的塊來處理。如果能對這些小塊處理得足夠快,就能達到低延時的效果。

交互式查詢場景,如果數據能全在內存,處理得足夠快的話,就可以支持交互式查詢。

機器學習和圖計算其實是和前幾種場景不同的 RDD 算子類型。Spark 提供了庫來支持常用的操作,用戶或者第三方庫也可以自己擴展。值得一提的是,Spark 的 RDD 模型和機器學習模型訓練的迭代計算非常契合,從一開始就在有的場景帶來了非常顯著的性能提升。

從這些可以看出來,比起 Hadoop MapReduce, Spark 本質上就是基于內存的更快的批處理。然后用足夠快的批處理來實現各種場景。

(來源:https://www.slideshare.net/ParisCarbone/state-management-in-apache-flink-consistent-stateful-distributed-stream-processing)

前面說過,在 Flink 中,如果輸入數據流是有邊界的,就自然達到了批處理的效果。這樣流和批的區別完全是邏輯上的,和處理實現獨立,用戶需要實現的邏輯也完全一樣,應該是更干凈的一種抽象。后續會在深入對比流計算方面的時候做更深入的討論。

Flink 也提供了庫來支持機器學習、圖計算等場景。從這方面來說和 Spark 沒有太大區別。

一個有意思的事情是用 Flink 的底層 API 可以支持只用 Flink 集群實現一些數據驅動的分布式服務。有一些公司用 Flink 集群實現了社交網絡,網絡爬蟲等服務。這個也體現了 Flink 作為計算引擎的通用性,并得益于 Flink 內置的靈活的狀態支持。

總的來說,Spark 和 Flink 都瞄準了在一個執行引擎上同時支持大多數數據處理場景,也應該都能做到這一點。主要區別就在于因為架構本身的局限在一些場景會受到限制。比較突出的地方就是 Spark Streaming 的 micro batch 執行模式。Spark 社區應該也意識到了這一點,最近在持續執行模式(continuous processing)方面開始發力。 具體情況會在后面介紹。

有狀態處理(Stateful Processing)

Flink 還有一個非常獨特的地方是在引擎中引入了托管狀態(managed state)。要理解托管狀態,首先要從有狀態處理說起。如果處理一個事件(或一條數據)的結果只跟事件本身的內容有關,稱為無狀態處理;反之結果還和之前處理過的事件有關,稱為有狀態處理。稍微復雜一點的數據處理,比如說基本的聚合,都是有狀態處理。Flink 很早就認為沒有好的狀態支持是做不好留處理的,因此引入了 managed state 并提供了 API 接口

Flink 中的狀態支持

(來源:https://www.slideshare.net/ParisCarbone/state-management-in-apache-flink-consistent-stateful-distributed-stream-processing)

一般在流處理的時候會比較關注有狀態處理,但是仔細看的話批處理也是會受到影響的。比如常見的窗口聚合,如果批處理的數據時間段比窗口大,是可以不考慮狀態的,用戶邏輯經常會忽略這個問題。但是當批處理時間段變得比窗口小的時候,一個批的結果實際上依賴于以前處理過的批。這時,因為批處理引擎一般沒有這個需求不會有很好的內置支持,維護狀態就成為了用戶需要解決的事情。比如窗口聚合的情況用戶就要加一個中間結果表記住還沒有完成的窗口的結果。這樣當用戶把批處理時間段變短的時候就會發現邏輯變復雜了。這是早期 Spark Streaming 用戶 經常碰到的問題,直到 Structured Streaming 出來才得到緩解。

而像 Flink 這樣以流處理為基本模型的引擎,因為一開始就避不開這個問題,所以引入了 managed state 來提供了一個通用的解決方案。比起用戶實現的特定解決方案,不但用戶開發更簡單,而且能提供更好的性能。最重要的是能更好地保證處理結果的一致性。

簡單來說,就是有一些內秉的數據處理邏輯,在批處理中容易被忽略或簡化處理掉也能得到可用的結果,而在流處理中問題被暴露出來解決掉了。所以流計算引擎用有限流來處理批在邏輯上比較嚴謹,能自然達到正確性。主要做一些不同的實現來優化性能就可以了。而用更小的批來模擬流需要處理一些以前沒有的問題。當計算引擎還沒有通用解決方案的時候就需要用戶自己解決了。類似的問題還有維表的變化(比如用戶信息的更新),批處理數據的邊界和遲到數據等等。

編程模型

Spark 1.6 時的 API 狀態

Spark 的初衷之一就是用統一的編程模型來解決用戶的各種需求,在這方面一直很下功夫。最初基于 RDD 的 API 就可以做各種類型的數據處理。后來為了簡化用戶開發,逐漸推出了更高層的 DataFrame(在 RDD 中加了列變成結構化數據)和 Datasets(在 DataFrame 的列上加了類型),并在 Spark 2.0 中做了整合(DataFrame = DataSet[Row])。Spark SQL 的支持也比較早就引入了。在加上各個處理類型 API 的不斷改進,比如 Structured Streaming 以及和機器學習深度學習的交互,到了今天 Spark 的 API 可以說是非常好用的,也是 Spark 最強的方面之一。

Spark 2.0 API

(來源:https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html)

Flink 的 API 也有類似的目標和發展路線。Flink 和 Spark 的核心 API 可以說是可以基本對應的。今天 Spark API 總體上更完備一下,比如說最近一兩年大力投入的和機器學習深度學習的整合方面。Flink 在流處理相關的方面還是領先一些,比如對 watermark、window、trigger 的各種支持。

Flink API

(來源:https://ci.apache.org/projects/flink/flink-docs-release-1.5/concepts/programming-model.html)

小結

Spark 和 Flink 都是通用的能夠支持超大規模數據處理,支持各種處理類型的計算引擎。兩個系統都有很多值得探討的方面在這里沒有觸及,比如 SQL 的優化,和機器學習的集成等等。這里主要是試圖從最基本的架構和設計方面來比較一下兩個系統。因為上層的功能在一定程度上是可以互相借鑒的,有足夠的投入應該都能做好。而基本的設計改變起來會傷筋動骨,更困難一些。

Spark 和 Flink 的不同執行模型帶來的最大的區別應該還是在對流計算的支持上。最開始的 Spark Streaming 對流計算想得過于簡單,對復雜一點的計算用起來會有不少問題。從 Spark 2.0 開始引入的 Structured Streaming 重新整理了流計算的語義,支持按事件時間處理和端到端的一致性。雖然在功能上還有不少限制,比之前已經有了長足的進步。不過 micro batch 執行方式帶來的問題還是存在,特別在規模上去以后性能問題會比較突出。最近 Spark 受一些應用場景的推動,也開始開發持續執行模式。2.3 里的實驗性發布還只支持簡單的 map 類操作。

Spark 持續執行模式狀態

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據處理
    +關注

    關注

    0

    文章

    601

    瀏覽量

    28579
  • 機器學習
    +關注

    關注

    66

    文章

    8422

    瀏覽量

    132714
  • SPARK
    +關注

    關注

    1

    文章

    105

    瀏覽量

    19922

原文標題:Spark比拼Flink:下一代大數據計算引擎之爭,誰主沉浮?

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    PCBA分析儀的技術原理和應用場景

    PCBA分析儀,通常指的是多功能PCBA測試儀,是一種綜合性測試設備,能夠同時進行多種測試,如功能測試、ICT(在線測試)、AOI(自動光學檢測)、X射線檢測等。以下是對其技術原理和應用場景
    發表于 12-04 14:31

    射頻分析儀的技術原理和應用場景

    射頻分析儀是一種功能強大的電子測量儀器,在無線通信、電子測試等領域具有廣泛的應用。以下是關于射頻分析儀的技術原理和應用場景的詳細介紹:一、射頻分析
    發表于 11-26 14:32

    導航分析儀的技術原理和應用場景

    特定的編碼規則進行解析,獲取其中的位置、速度、時間等關鍵信息。  頻譜分析:對于一些復雜的導航信號環境,導航分析儀會采用頻譜分析技術。通過將
    發表于 11-19 15:13

    移動終端測試儀的技術原理和應用場景

    ,確保設備在導航服務中的準確性和可靠性。 應用場景移動終端測試儀的應用場景廣泛,涵蓋了從研發到生產、從維護到監管的多個環節: 移動維修服務:維修技術人員可以使用便攜的綜測儀快速對手機進行
    發表于 11-04 16:01

    實時示波器的技術原理和應用場景

    波形圖像。在信號處理方面,示波器首先將接收到的被測信號進行放大和濾波等處理,以確保信號的準確性和穩定性。然后,通過A/D轉換技術,將模擬信號轉換為數字信號,以便進行后續的數字處理和顯示。二、應用
    發表于 10-23 14:22

    參數分析儀的技術原理和應用場景

    參數分析儀的技術原理和應用場景因其具體類型和用途的不同而有所差異。以下是對參數分析技術原理和應用場景
    發表于 10-17 14:42

    智能IC卡測試設備的技術原理和應用場景

    智能IC卡測試設備的技術原理和應用場景,可以從以下幾個方面進行闡述:技術原理智能IC卡測試設備的技術原理主要圍繞IC卡的通信和數據處理機制展
    發表于 09-26 14:27

    NFC協議分析儀的技術原理和應用場景

    的兼容性和性能表現,確保物聯網設備的穩定運行和高效通信。 安全分析:在安全領域,NFC協議分析儀可以用于進行NFC安全分析。通過模擬攻擊場景
    發表于 09-25 14:45

    USB協議分析儀的技術原理和應用場景

    USB協議分析儀的技術原理和應用場景可以詳細闡述如下:技術原理USB協議分析儀的技術原理主要基于
    發表于 09-24 14:29

    什么是 Flink SQL 解決不了的問題?

    覆蓋不了的問題,但 SQL 的易用性又難以讓人釋懷。所以有些場景在使用 FLink SQL 開始就與需要額外注意,下面就介紹一種多表關聯時存在部分列更新(partial Update)場景,在
    的頭像 發表于 07-09 20:50 ?327次閱讀

    spark運行的基本流程

    前言: 由于最近對spark的運行流程非常感興趣,所以閱讀了《Spark大數據處理:技術、應用與性能優化》一書。通過這本書的學習,了解了spark的核心
    的頭像 發表于 07-02 10:31 ?417次閱讀
    <b class='flag-5'>spark</b>運行的基本流程

    Spark基于DPU的Native引擎算子卸載方案

    Spark Streaming)、機器學習(Spark MLlib)和圖計算(GraphX)。Spark?使用內存加載保存數據并進行迭代計算,減少磁盤溢寫,同時支持 Java、Sca
    的頭像 發表于 06-28 17:12 ?699次閱讀
    <b class='flag-5'>Spark</b>基于DPU的Native引擎算子卸載方案

    關于Spark的從0實現30s內實時監控指標計算

    前言 說起Spark,大家就會自然而然地想到Flink,而且會不自覺地將這兩種主流的大數據實時處理技術進行比較。然后最終得出結論:Flink
    的頭像 發表于 06-14 15:52 ?467次閱讀

    RDMA技術在Apache Spark中的應用

    、電信、零售、醫療保健還是物聯網,Spark的應用幾乎遍及所有需要處理海量數據和復雜計算的領域。它的快速、易用和通用性,使得數據科學家和工程師能夠輕松實現數據挖掘、數據分析、實時處理等任務。 然而,在Spark的燦爛光環背后,一
    的頭像 發表于 03-25 18:13 ?1551次閱讀
    RDMA<b class='flag-5'>技術</b>在Apache <b class='flag-5'>Spark</b>中的應用

    基于DPU和HADOS-RACE加速Spark 3.x

    的查詢和分析功能。 隨著SSD和萬兆網卡普及以及IO技術的提升,CPU計算逐漸成為Spark 作業的瓶頸,而
    的頭像 發表于 03-25 18:12 ?1384次閱讀
    基于DPU和HADOS-RACE加速<b class='flag-5'>Spark</b> 3.x
    主站蜘蛛池模板: 87影院午夜福利| 国内精品久久久久久久999下| 黄色片中文| 亚洲视频中文字幕在线观看| 久久热在线视频精品店| 越南美女内射BBWXZ| 美女被日出水| 嘟嘟嘟在线视频免费观看高清中文| 素人约啪第五季| 久久vs国产综合色| yw193.c国产在线观看| 亚洲AV久久无码精品热九九| 老师你狠狂| 闺蜜扒开我尿口使劲揉| 杨幂视频在线观看1分30秒| 欧美阿v在线天堂| 国产午夜精品理论片在线| 1973性农场未删减版| 帅哥操帅哥| 露露的性战k8经典| 国产AV精品国语对白国产| 夜月视频直播免费观看| 亲伦在线观看| 九九久久国产精品大片| 爱情岛aqdlttv| 夜夜草导航| 双性诱受灌满哭求饶BL| 伦理片天堂eeuss影院| 国产精品久久久久久人妻精品蜜桃 | 少妇伦子伦情品无吗| 久久精品热老司机| 国产1广场舞丰满老女偷| 中文字幕高清在线观看| 小玲被公扒开腿| 人妻互换免费中文字幕| 久久久久综合一本久道| 国产精品久久久久久久久爆乳| 97人人超碰国产精品最新蜜芽| 亚洲精品在看在线观看| 手机看片国产免费久久网| 女仆翻身大作战|