91精品久久久久久久久中文字幕|93久久精品日日躁夜夜躁欧美|99re久久这里只有精品6|99久久最新国产

  • <s id="hb53h"><abbr id="hb53h"></abbr></s>
      <s id="hb53h"></s>

        <sup id="hb53h"></sup>

        微信logo
        企業(yè)微信
        電話logo 15372607513
        首頁 > 醫(yī)管交流 > 詳情

        淺談大數據框架

        來自:??OPEN?? | 2022-07-19 22:40:27

        現有的五種大數據框架分別是:

        僅批處理框架的:Apache Hadoop

        僅流處理框架的:Apache Storm/Apache Samza

        混合框架:Apache Spark/Apache Flink

        大數據框架到底是什么呢?

        處理框架和處理引擎負責對數據系統中的數據進行計算。雖然“引擎”和“框架”之間的區(qū)別沒有什么權威的定義,但大部分時候可以將前者定義為實際負責處理數據操作的組件,后者則可定義為承擔類似作用的一系列組件。

        例如Apache Hadoop可以看作一種以MapReduce作為默認處理引擎的處理框架。引擎和框架通常可以相互替換或同時使用。例如另一個框架Apache Spark可以納入Hadoop并取代MapReduce。組件之間的這種互操作性是大數據系統靈活性如此之高的原因之一。

        雖然負責處理生命周期內這一階段數據的系統通常都很復雜,但從廣義層面來看它們的目標是非常一致的:通過對數據執(zhí)行操作提高理解能力,揭示出數據蘊含的模式,并針對復雜互動獲得見解。

        為了簡化這些組件的討論,我們會通過不同處理框架的設計意圖,按照所處理的數據狀態(tài)對其進行分類。一些系統可以用批處理方式處理數據,一些系統可以用流方式處理連續(xù)不斷流入系統的數據。此外還有一些系統可以同時處理這兩類數據。

        批處理系統

        流處理系統會對隨時進入系統的數據進行計算。相比批處理模式,這是一種截然不同的處理方式。流處理方式無需針對整個數據集執(zhí)行操作,而是對通過系統傳輸的每個數據項執(zhí)行操作。

        · 流處理中的數據集是“無邊界”的,這就產生了幾個重要的影響:

        · 完整數據集只能代表截至目前已經進入到系統中的數據總量。

        · 工作數據集也許更相關,在特定時間只能代表某個單一數據項。

        處理工作是基于事件的,除非明確停止否則沒有“盡頭”。處理結果立刻可用,并會隨著新數據的抵達繼續(xù)更新。

        流處理系統可以處理幾乎無限量的數據,但同一時間只能處理一條(真正的流處理)或很少量(微批處理,Micro-batch Processing)數據,不同記錄間只維持最少量的狀態(tài)。雖然大部分系統提供了用于維持某些狀態(tài)的方法,但流處理主要針對副作用更少,更加功能性的處理(Functional processing)進行優(yōu)化。

        此類處理非常適合某些類型的工作負載。有近實時處理需求的任務很適合使用流處理模式。分析、服務器或應用程序錯誤日志,以及其他基于時間的衡量指標是最適合的類型,因為對這些領域的數據變化做出響應對于業(yè)務職能來說是極為關鍵的。流處理很適合用來處理必須對變動或峰值做出響應,并且關注一段時間內變化趨勢的數據。

        Apache Storm

        Apache Storm是一種側重于極低延遲的流處理框架,也許是要求近實時處理的工作負載的最佳選擇。該技術可處理非常大量的數據,通過比其他解決方案更低的延遲提供結果。

        流處理模式

        Storm的流處理可對框架中名為Topology(拓撲)的DAG(Directed Acyclic Graph,有向無環(huán)圖)進行編排。這些拓撲描述了當數據片段進入系統后,需要對每個傳入的片段執(zhí)行的不同轉換或步驟。

        拓撲包含:

        · Stream:普通的數據流,這是一種會持續(xù)抵達系統的無邊界數據。

        · Spout:位于拓撲邊緣的數據流來源,例如可以是API或查詢等,從這里可以產生待處理的數據。

        · Bolt:Bolt代表需要消耗流數據,對其應用操作,并將結果以流的形式進行輸出的處理步驟。Bolt需要與每個Spout建立連接,隨后相互連接以組成所有必要的處理。在拓撲的尾部,可以使用最終的Bolt輸出作為相互連接的其他系統的輸入。

        Storm背后的想法是使用上述組件定義大量小型的離散操作,隨后將多個組件組成所需拓撲。默認情況下Storm提供了“至少一次”的處理保證,這意味著可以確保每條消息至少可以被處理一次,但某些情況下如果遇到失敗可能會處理多次。Storm無法確??梢园凑仗囟樞蛱幚硐?。

        Trident拓撲包含:

        · 流批(Stream batch):這是指流數據的微批,可通過分塊提供批處理語義。

        · 操作(Operation):是指可以對數據執(zhí)行的批處理過程。

        總結

        對于延遲需求很高的純粹的流處理工作負載,Storm可能是最適合的技術。該技術可以保證每條消息都被處理,可配合多種編程語言使用。由于Storm無法進行批處理,如果需要這些能力可能還需要使用其他軟件。如果對嚴格的一次處理保證有比較高的要求,此時可考慮使用Trident。不過這種情況下其他流處理框架也許更適合。

        Apache Samza

        Apache Samza是一種與Apache Kafka消息系統緊密綁定的流處理框架。雖然Kafka可用于很多流處理系統,但按照設計,Samza可以更好地發(fā)揮Kafka獨特的架構優(yōu)勢和保障。該技術可通過Kafka提供容錯、緩沖,以及狀態(tài)存儲。

        Samza可使用YARN作為資源管理器。這意味著默認情況下需要具備Hadoop集群(至少具備HDFS和YARN),但同時也意味著Samza可以直接使用YARN豐富的內建功能。

        流處理模式

        Samza依賴Kafka的語義定義流的處理方式。Kafka在處理數據時涉及下列概念:

        · Topic(話題):進入Kafka系統的每個數據流可稱之為一個話題。話題基本上是一種可供消耗方訂閱的,由相關信息組成的數據流。

        · Partition(分區(qū)):為了將一個話題分散至多個節(jié)點,Kafka會將傳入的消息劃分為多個分區(qū)。分區(qū)的劃分將基于鍵(Key)進行,這樣可以保證包含同一個鍵的每條消息可以劃分至同一個分區(qū)。分區(qū)的順序可獲得保證。

        · Broker(代理):組成Kafka集群的每個節(jié)點也叫做代理。

        · Producer(生成方):任何向Kafka話題寫入數據的組件可以叫做生成方。生成方可提供將話題劃分為分區(qū)所需的鍵。

        · Consumer(消耗方):任何從Kafka讀取話題的組件可叫做消耗方。消耗方需要負責維持有關自己分支的信息,這樣即可在失敗后知道哪些記錄已經被處理過了。

        由于Kafka相當于永恒不變的日志,Samza也需要處理永恒不變的數據流。這意味著任何轉換創(chuàng)建的新數據流都可被其他組件所使用,而不會對最初的數據流產生影響。

        優(yōu)勢和局限

        乍看之下,Samza對Kafka類查詢系統的依賴似乎是一種限制,然而這也可以為系統提供一些獨特的保證和功能,這些內容也是其他流處理系統不具備的。

        例如Kafka已經提供了可以通過低延遲方式訪問的數據存儲副本,此外還可以為每個數據分區(qū)提供非常易用且低成本的多訂閱者模型。所有輸出內容,包括中間態(tài)的結果都可寫入到Kafka,并可被下游步驟獨立使用。

        這種對Kafka的緊密依賴在很多方面類似于MapReduce引擎對HDFS的依賴。雖然在批處理的每個計算之間對HDFS的依賴導致了一些嚴重的性能問題,但也避免了流處理遇到的很多其他問題。

        Samza與Kafka之間緊密的關系使得處理步驟本身可以非常松散地耦合在一起。無需事先協調,即可在輸出的任何步驟中增加任意數量的訂閱者,對于有多個團隊需要訪問類似數據的組織,這一特性非常有用。多個團隊可以全部訂閱進入系統的數據話題,或任意訂閱其他團隊對數據進行過某些處理后創(chuàng)建的話題。這一切并不會對數據庫等負載密集型基礎架構造成額外的壓力。

        直接寫入Kafka還可避免回壓(Backpressure)問題?;貕菏侵府斬撦d峰值導致數據流入速度超過組件實時處理能力的情況,這種情況可能導致處理工作停頓并可能丟失數據。按照設計,Kafka可以將數據保存很長時間,這意味著組件可以在方便的時候繼續(xù)進行處理,并可直接重啟動而無需擔心造成任何后果。

        Samza可以使用以本地鍵值存儲方式實現的容錯檢查點系統存儲數據。這樣Samza即可獲得“至少一次”的交付保障,但面對由于數據可能多次交付造成的失敗,該技術無法對匯總后狀態(tài)(例如計數)提供精確恢復。

        Samza提供的高級抽象使其在很多方面比Storm等系統提供的基元(Primitive)更易于配合使用。目前Samza只支持JVM語言,這意味著它在語言支持方面不如Storm靈活。

        總結

        對于已經具備或易于實現Hadoop和Kafka的環(huán)境,Apache Samza是流處理工作負載一個很好的選擇。Samza本身很適合有多個團隊需要使用(但相互之間并不一定緊密協調)不同處理階段的多個數據流的組織。Samza可大幅簡化很多流處理工作,可實現低延遲的性能。如果部署需求與當前系統不兼容,也許并不適合使用,但如果需要極低延遲的處理,或對嚴格的一次處理語義有較高需求,此時依然適合考慮。

        混合處理系統:批處理和流處理

        一些處理框架可同時處理批處理和流處理工作負載。這些框架可以用相同或相關的組件和API處理兩種類型的數據,借此讓不同的處理需求得以簡化。

        如你所見,這一特性主要是由Spark和Flink實現的,下文將介紹這兩種框架。實現這樣的功能重點在于兩種不同處理模式如何進行統一,以及要對固定和不固定數據集之間的關系進行何種假設。

        雖然側重于某一種處理類型的項目會更好地滿足具體用例的要求,但混合框架意在提供一種數據處理的通用解決方案。這種框架不僅可以提供處理數據所需的方法,而且提供了自己的集成項、庫、工具,可勝任圖形分析、機器學習、交互式查詢等多種任務。

        Apache Spark

        Apache Spark是一種包含流處理能力的下一代批處理框架。與Hadoop的MapReduce引擎基于各種相同原則開發(fā)而來的Spark主要側重于通過完善的內存計算和處理優(yōu)化機制加快批處理工作負載的運行速度。

        Spark可作為獨立集群部署(需要相應存儲層的配合),或可與Hadoop集成并取代MapReduce引擎。

        批處理模式

        與MapReduce不同,Spark的數據處理工作全部在內存中進行,只在一開始將數據讀入內存,以及將最終結果持久存儲時需要與存儲層交互。所有中間態(tài)的處理結果均存儲在內存中。

        雖然內存中處理方式可大幅改善性能,Spark在處理與磁盤有關的任務時速度也有很大提升,因為通過提前對整個任務集進行分析可以實現更完善的整體式優(yōu)化。為此Spark可創(chuàng)建代表所需執(zhí)行的全部操作,需要操作的數據,以及操作和數據之間關系的Directed Acyclic Graph(有向無環(huán)圖),即DAG,借此處理器可以對任務進行更智能的協調。

        為了實現內存中批計算,Spark會使用一種名為Resilient Distributed Dataset(彈性分布式數據集),即RDD的模型來處理數據。這是一種代表數據集,只位于內存中,永恒不變的結構。針對RDD執(zhí)行的操作可生成新的RDD。每個RDD可通過世系(Lineage)回溯至父級RDD,并最終回溯至磁盤上的數據。Spark可通過RDD在無需將每個操作的結果寫回磁盤的前提下實現容錯。

        流處理模式

        流處理能力是由Spark Streaming實現的。Spark本身在設計上主要面向批處理工作負載,為了彌補引擎設計和流處理工作負載特征方面的差異,Spark實現了一種叫做微批(Micro-batch)*的概念。在具體策略方面該技術可以將數據流視作一系列非常小的“批”,借此即可通過批處理引擎的原生語義進行處理。

        Spark Streaming會以亞秒級增量對流進行緩沖,隨后這些緩沖會作為小規(guī)模的固定數據集進行批處理。這種方式的實際效果非常好,但相比真正的流處理框架在性能方面依然存在不足。

        優(yōu)勢和局限

        使用Spark而非Hadoop MapReduce的主要原因是速度。在內存計算策略和先進的DAG調度等機制的幫助下,Spark可以用更快速度處理相同的數據集。

        Spark的另一個重要優(yōu)勢在于多樣性。該產品可作為獨立集群部署,或與現有Hadoop集群集成。該產品可運行批處理和流處理,運行一個集群即可處理不同類型的任務。

        除了引擎自身的能力外,圍繞Spark還建立了包含各種庫的生態(tài)系統,可為機器學習、交互式查詢等任務提供更好的支持。相比MapReduce,Spark任務更是“眾所周知”地易于編寫,因此可大幅提高生產力。

        為流處理系統采用批處理的方法,需要對進入系統的數據進行緩沖。緩沖機制使得該技術可以處理非常大量的傳入數據,提高整體吞吐率,但等待緩沖區(qū)清空也會導致延遲增高。這意味著Spark Streaming可能不適合處理對延遲有較高要求的工作負載。

        由于內存通常比磁盤空間更貴,因此相比基于磁盤的系統,Spark成本更高。然而處理速度的提升意味著可以更快速完成任務,在需要按照小時數為資源付費的環(huán)境中,這一特性通??梢缘窒黾拥某杀?。

        Spark內存計算這一設計的另一個后果是,如果部署在共享的集群中可能會遇到資源不足的問題。相比Hadoop MapReduce,Spark的資源消耗更大,可能會對需要在同一時間使用集群的其他任務產生影響。從本質來看,Spark更不適合與Hadoop堆棧的其他組件共存一處。

        總結

        Spark是多樣化工作負載處理任務的最佳選擇。Spark批處理能力以更高內存占用為代價提供了無與倫比的速度優(yōu)勢。對于重視吞吐率而非延遲的工作負載,則比較適合使用Spark Streaming作為流處理解決方案。

        Apache Flink

        Apache Flink是一種可以處理批處理任務的流處理框架。該技術可將批處理數據視作具備有限邊界的數據流,借此將批處理任務作為流處理的子集加以處理。為所有處理任務采取流處理為先的方法會產生一系列有趣的副作用。

        這種流處理為先的方法也叫做Kappa架構,與之相對的是更加被廣為人知的Lambda架構(該架構中使用批處理作為主要處理方法,使用流作為補充并提供早期未經提煉的結果)。Kappa架構中會對一切進行流處理,借此對模型進行簡化,而這一切是在最近流處理引擎逐漸成熟后才可行的。

        流處理模型

        Flink的流處理模型在處理傳入數據時會將每一項視作真正的數據流。Flink提供的DataStream API可用于處理無盡的數據流。Flink可配合使用的基本組件包括:

        · Stream(流)是指在系統中流轉的,永恒不變的無邊界數據集

        · Operator(操作方)是指針對數據流執(zhí)行操作以產生其他數據流的功能

        · Source(源)是指數據流進入系統的入口點

        · Sink(槽)是指數據流離開Flink系統后進入到的位置,槽可以是數據庫或到其他系統的連接器

        為了在計算過程中遇到問題后能夠恢復,流處理任務會在預定時間點創(chuàng)建快照。為了實現狀態(tài)存儲,Flink可配合多種狀態(tài)后端系統使用,具體取決于所需實現的復雜度和持久性級別。

        此外Flink的流處理能力還可以理解“事件時間”這一概念,這是指事件實際發(fā)生的時間,此外該功能還可以處理會話。這意味著可以通過某種有趣的方式確保執(zhí)行順序和分組。

        批處理模型

        Flink的批處理模型在很大程度上僅僅是對流處理模型的擴展。此時模型不再從持續(xù)流中讀取數據,而是從持久存儲中以流的形式讀取有邊界的數據集。Flink會對這些處理模型使用完全相同的運行時。

        Flink可以對批處理工作負載實現一定的優(yōu)化。例如由于批處理操作可通過持久存儲加以支持,Flink可以不對批處理工作負載創(chuàng)建快照。數據依然可以恢復,但常規(guī)處理操作可以執(zhí)行得更快。

        另一個優(yōu)化是對批處理任務進行分解,這樣即可在需要的時候調用不同階段和組件。借此Flink可以與集群的其他用戶更好地共存。對任務提前進行分析使得Flink可以查看需要執(zhí)行的所有操作、數據集的大小,以及下游需要執(zhí)行的操作步驟,借此實現進一步的優(yōu)化。

        優(yōu)勢和局限

        Flink目前是處理框架領域一個獨特的技術。雖然Spark也可以執(zhí)行批處理和流處理,但Spark的流處理采取的微批架構使其無法適用于很多用例。Flink流處理為先的方法可提供低延遲,高吞吐率,近乎逐項處理的能力。

        Flink的很多組件是自行管理的。雖然這種做法較為罕見,但出于性能方面的原因,該技術可自行管理內存,無需依賴原生的Java垃圾回收機制。與Spark不同,待處理數據的特征發(fā)生變化后Flink無需手工優(yōu)化和調整,并且該技術也可以自行處理數據分區(qū)和自動緩存等操作。

        Flink會通過多種方式對工作進行分許進而優(yōu)化任務。這種分析在部分程度上類似于SQL查詢規(guī)劃器對關系型數據庫所做的優(yōu)化,可針對特定任務確定最高效的實現方法。該技術還支持多階段并行執(zhí)行,同時可將受阻任務的數據集合在一起。對于迭代式任務,出于性能方面的考慮,Flink會嘗試在存儲數據的節(jié)點上執(zhí)行相應的計算任務。此外還可進行“增量迭代”,或僅對數據中有改動的部分進行迭代。

        在用戶工具方面,Flink提供了基于Web的調度視圖,借此可輕松管理任務并查看系統狀態(tài)。用戶也可以查看已提交任務的優(yōu)化方案,借此了解任務最終是如何在集群中實現的。對于分析類任務,Flink提供了類似SQL的查詢,圖形化處理,以及機器學習庫,此外還支持內存計算。

        Flink能很好地與其他組件配合使用。如果配合Hadoop 堆棧使用,該技術可以很好地融入整個環(huán)境,在任何時候都只占用必要的資源。該技術可輕松地與YARN、HDFS和Kafka 集成。在兼容包的幫助下,Flink還可以運行為其他處理框架,例如Hadoop和Storm編寫的任務。

        目前Flink最大的局限之一在于這依然是一個非常“年幼”的項目?,F實環(huán)境中該項目的大規(guī)模部署尚不如其他處理框架那么常見,對于Flink在縮放能力方面的局限目前也沒有較為深入的研究。隨著快速開發(fā)周期的推進和兼容包等功能的完善,當越來越多的組織開始嘗試時,可能會出現越來越多的Flink部署。

        總結

        Flink提供了低延遲流處理,同時可支持傳統的批處理任務。Flink也許最適合有極高流處理需求,并有少量批處理任務的組織。該技術可兼容原生Storm和Hadoop程序,可在YARN管理的集群上運行,因此可以很方便地進行評估。快速進展的開發(fā)工作使其值得被大家關注。

        結論

        大數據系統可使用多種處理技術。

        對于僅需要批處理的工作負載,如果對時間不敏感,比其他解決方案實現成本更低的Hadoop將會是一個好選擇。

        對于僅需要流處理的工作負載,Storm可支持更廣泛的語言并實現極低延遲的處理,但默認配置可能產生重復結果并且無法保證順序。Samza與YARN和Kafka緊密集成可提供更大靈活性,更易用的多團隊使用,以及更簡單的復制和狀態(tài)管理。

        對于混合型工作負載,Spark可提供高速批處理和微批處理模式的流處理。該技術的支持更完善,具備各種集成庫和工具,可實現靈活的集成。Flink提供了真正的流處理并具備批處理能力,通過深度優(yōu)化可運行針對其他平臺編寫的任務,提供低延遲的處理,但實際應用方面還為時過早。

        最適合的解決方案主要取決于待處理數據的狀態(tài),對處理所需時間的需求,以及希望得到的結果。具體是使用全功能解決方案或主要側重于某種項目的解決方案,這個問題需要慎重權衡。隨著逐漸成熟并被廣泛接受,在評估任何新出現的創(chuàng)新型解決方案時都需要考慮類似的問題。

        本文版權歸作者所有!如有侵權,請聯系管理員刪除。文章僅代表作者觀點,不代表行迪醫(yī)管立場。

        icon_message

        網友評論

        未登錄

        嘗試看看下列相關的交流摘要推薦

        組件 框架 數據 處理 葉亞維 大數據 行迪 沈昌亮 醫(yī)院排名 吳洪川 評審 信息化 名院名科 國家衛(wèi)健委 院辦 數字化 手術 衛(wèi)健委 醫(yī)共體 危急
        提交成功!
        提醒!
        提交成功!