溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spark Streaming筆記整理(一):基本工作原理介紹

發(fā)布時間:2020-07-24 12:38:27 來源:網(wǎng)絡 閱讀:2510 作者:xpleaf 欄目:大數(shù)據(jù)

[TOC]


概述

大數(shù)據(jù)實時計算介紹

1、Spark Streaming,其實就是一種Spark提供的,對于大數(shù)據(jù),進行實時計算的一種框架。它的底層,其實,也是基于我們之前講解的Spark Core的。基本的計算模型,還是基于內(nèi)存的大數(shù)據(jù)實時計算模型。而且,它的底層的核心組件還是我們在Spark Core中經(jīng)常用到的RDD。

2、針對實時計算的特點,在RDD之上,進行了一層封裝,叫做DStream。其實,學過了Spark SQL之后,你理解這種封裝就容易了。之前學習Spark SQL是不是也是發(fā)現(xiàn),它針對數(shù)據(jù)查詢這種應用,提供了一種基于RDD之上的全新概念,DataFrame,但是,其底層還是基于RDD的。所以,RDD是整個Spark技術(shù)生態(tài)中的核心。

正如市面上存在眾多可用的流處理引擎,人們經(jīng)常詢問我們Spark Streaming有何獨特的優(yōu)勢?那么首先要說的就是Apache Spark在批處理以及流處理上提供了原生支持。這與別的系統(tǒng)不同之處在于其他系統(tǒng)的處理引擎要么只專注于流處理,要么只負責批處理且僅提供需要外部實現(xiàn)的流處理API接口而已。Spark 憑借其執(zhí)行引擎以及統(tǒng)一的編程模型可實現(xiàn)批處理與流處理,這就是與傳統(tǒng)流處理系統(tǒng)相比Spark Streaming所具備獨一無二的優(yōu)勢。尤其特別體現(xiàn)在以下四個重要部分:

1.能在故障報錯與straggler的情況下迅速恢復狀態(tài);
2.更好的負載均衡與資源使用;
3.靜態(tài)數(shù)據(jù)集與流數(shù)據(jù)的整合和可交互查詢;
4.內(nèi)置豐富高級算法處理庫(SQL、機器學習、圖處理)

流處理架構(gòu)——過去與現(xiàn)在1

當前分布式流處理管道執(zhí)行方式如下所述:

1、接收來自數(shù)據(jù)源的流數(shù)據(jù)(比如時日志、系統(tǒng)遙測數(shù)據(jù)、物聯(lián)網(wǎng)設備數(shù)據(jù)等等),處理成為數(shù)據(jù)攝取系統(tǒng),比如Apache Kafka、Amazon Kinesis等等。

2、在集群上并行處理數(shù)據(jù)。這也是設計流處理引擎的關(guān)鍵所在,我們將在下文中做出更細節(jié)性的討論。

3、輸出結(jié)果存放至下游系統(tǒng)(例如HBase、Cassandra, Kafka等等)。

為了處理這些數(shù)據(jù),大部分傳統(tǒng)的流處理系統(tǒng)被設計為連續(xù)算子 模型,其工作方式如下:

1、有一系列的工作節(jié)點,每組節(jié)點運行一至多個連續(xù)算子;

2、對于流數(shù)據(jù),每個連續(xù)算子一次處理一條記錄,并且將記錄傳輸給管道中別的算子;

3、源算子從攝入系統(tǒng)接收數(shù)據(jù),接著輸出到下游系統(tǒng)。

Spark Streaming筆記整理(一):基本工作原理介紹

流處理架構(gòu)——過去與現(xiàn)在2

1、連續(xù)算子是一種較為簡單、自然的模型。然而,隨著如今大數(shù)據(jù)時代下,數(shù)據(jù)規(guī)模的不斷擴大以及越來越復雜的實時分析,這個傳統(tǒng)的架構(gòu)也面臨著嚴峻的挑戰(zhàn)。因此,我們設計Spark Streaming就是為了解決如下幾點需求:

2、故障迅速恢復–數(shù)據(jù)越龐大,出現(xiàn)節(jié)點故障與節(jié)點運行變慢(例如straggler)情況的概率也越來越高。因此,系統(tǒng)要是能夠?qū)崟r給出結(jié)果,就必須能夠自動修復故障。可惜在傳統(tǒng)流處理系統(tǒng)中,在這些工作節(jié)點靜態(tài)分配的連續(xù)算子要迅速完成這項工作仍然是個挑戰(zhàn);

3、負載均衡–在連續(xù)算子系統(tǒng)中工作節(jié)點間不平衡分配加載會造成部分節(jié)點性能的bottleneck(運行瓶頸)。這些問題更常見于大規(guī)模數(shù)據(jù)與動態(tài)變化的工作量面前。為了解決這個問題,那么要求系統(tǒng)必須能夠根據(jù)工作量動態(tài)調(diào)整節(jié)點間的資源分配;

4、統(tǒng)一的流處理與批處理以及交互工作–在許多用例中,與流數(shù)據(jù)的交互是很有必要的(畢竟所有流系統(tǒng)都將這置于內(nèi)存中)或者與靜態(tài)數(shù)據(jù)集結(jié)合(例如pre-computed model)。這些都很難在連續(xù)算子系統(tǒng)中實現(xiàn),當系統(tǒng)動態(tài)地添加新算子時,并沒有為其設計臨時查詢功能,這樣大大的削弱了用戶與系統(tǒng)的交互能力。因此我們需要一個引擎能夠集成批處理、流處理與交互查詢;

5、高級分析(例如機器學習、SQL查詢等等)–一些更復雜的工作需要不斷學習和更新數(shù)據(jù)模型,或者利用SQL查詢流數(shù)據(jù)中最新的特征信息。因此,這些分析任務中需要有一個共同的集成抽象組件,讓開發(fā)人員更容易地去完成他們的工作。

6、為了解決這些要求,Spark Streaming使用了一個新的結(jié)構(gòu),我們稱之為discretized streams(離散化的流數(shù)據(jù)處理),它可以直接使用Spark引擎中豐富的庫并且擁有優(yōu)秀的故障容錯機制。

Spark Streaming簡單介紹

1、Spark的運行模式多種多樣,靈活多變,部署在單機上時,既可以用本地模式運行,也可以用偽分布式模式運行;而當以分布式集群的方式部署時,也有眾多的運行模式可供選擇,這取決于集群的實際情況,底層的資源調(diào)度既可以依賴于外部的資源調(diào)度框架,也可以使用Spark內(nèi)建的Standalone模式。對于外部資源調(diào)度框架的支持,目前的實現(xiàn)包括相對穩(wěn)定的Mesos模式,以及還在持續(xù)開發(fā)更新中的Hadoop YARN模式。

2、Spark Streaming是Spark Core API的一種擴展,它可以用于進行大規(guī)模、高吞吐量、容錯的實時數(shù)據(jù)流的處理。它支持從很多種數(shù)據(jù)源中讀取數(shù)據(jù),比如Kafka、Flume、Twitter、ZeroMQ、Kinesis、ZMQ或者是TCP Socket。并且能夠使用類似高階函數(shù)的復雜算法來進行數(shù)據(jù)處理,比如map、reduce、join和window。處理后的數(shù)據(jù)可以被保存到文件系統(tǒng)、數(shù)據(jù)庫、Dashboard等存儲中。

Spark Streaming筆記整理(一):基本工作原理介紹

Spark Streaming基本工作原理

接收實時輸入數(shù)據(jù)流,然后將數(shù)據(jù)拆分成多個batch,比如每收集1秒的數(shù)據(jù)封裝為一個batch,然后將每個batch交給Spark的計算引擎進行處理,最后會生產(chǎn)出一個結(jié)果數(shù)據(jù)流,其中的數(shù)據(jù),也是由一個一個的batch所組成的。

Spark Streaming筆記整理(一):基本工作原理介紹

Spark Streaming DStream

1、Spark Streaming提供了一種高級的抽象,叫做DStream,英文全稱為Discretized Stream,中文翻譯為“離散流”,它代表了一個持續(xù)不斷的數(shù)據(jù)流。DStream可以通過輸入數(shù)據(jù)源來創(chuàng)建,比如Kafka、Flume、ZMQ和Kinesis;也可以通過對其他DStream應用高階函數(shù)來創(chuàng)建,比如map、reduce、join、window。

2、DStream的內(nèi)部,其實一系列持續(xù)不斷產(chǎn)生的RDD。RDD是Spark Core的核心抽象,即,不可變的,分布式的數(shù)據(jù)集。DStream中的每個RDD都包含了一個時間段內(nèi)的數(shù)據(jù)。

Spark Streaming筆記整理(一):基本工作原理介紹

1、對DStream應用的算子,比如map,其實在底層會被翻譯為對DStream中每個RDD的操作。比如對一個DStream執(zhí)行一個map操作,會產(chǎn)生一個新的DStream。但是,在底層,其實其原理為,對輸入DStream中每個時間段的RDD,都應用一遍map操作,然后生成的新的RDD,即作為新的DStream中的那個時間段的一個RDD。底層的RDD的transformation操作。

2、還是由Spark Core的計算引擎來實現(xiàn)的。Spark Streaming對Spark Core進行了一層封裝,隱藏了細節(jié),然后對開發(fā)人員提供了方便易用的高層次的API。

Spark Streaming筆記整理(一):基本工作原理介紹

與其它流式框架對比分析

Spark Streaming、Flink和Storm對比

對比點 Storm Spark Streaming Flink
實時計算模型 純實時,來一條數(shù)據(jù)處理一條 1、準實時,對一個時間段的RDD數(shù)據(jù)收集起來,一起處理 流式計算和批處理分別采用DataStream和DataSet
實時計算延遲度 毫秒級 秒級 秒級
吞吐量
事務機制 支持完善 支持,但不夠完善 支持,但不夠完善
健壯性/容錯性 ZK、Acker,很好 CheckPoint,WAL一般 CheckPoint一般
動態(tài)調(diào)整并行度 支持 不支持 支持
運行時同時支持流失和離線處理 不支持 支持 支持
成熟度
模型 native Micro-batching native
API 組合式 聲明式 組合式
  • 組合式:操作更加基礎的API操作,一步步精細控制,各組件組合定義成拓撲;
  • 聲明式:提供封裝后的高階函數(shù)。封裝后可提供初步的優(yōu)化;可提供窗口管理、狀態(tài)管理等高級操作;

Spark Streaming、Flink和Storm的優(yōu)勢分析

1、Spark Streaming絕對談不上比Storm、Flink優(yōu)秀。這兩個框架在實時計算領域中,都很優(yōu)秀,只是擅長的細分場景并不相同。

2、Spark Streaming在吞吐量上要比Storm優(yōu)秀。

3、Storm在實時延遲度上,比Spark Streaming就好多了,前者是純實時,后者是準實時。而且,Storm的事務機制、健壯性/容錯性、動態(tài)調(diào)整并行度等特性,都要比Spark Streaming更加優(yōu)秀。

4、Spark Streaming,有一點是Storm絕對比不上的,就是:它位于Spark整個生態(tài)技術(shù)棧中,因此Spark Streaming可以和Spark Core、Spark SQL、Spark?。莚aphx無縫整合,換句話說,我們可以對實時處理出來的中間數(shù)據(jù),立即在程序中無縫進行延遲批處理、交互式查詢等操作。這個特點大大增強了Spark Streaming的優(yōu)勢和功能。

Spark Streaming、Flink和Storm的應用場景

Storm

1、建議在需要純實時,不能忍受1秒以上延遲的場景下使用,比如實時計算系統(tǒng),要求純實時進行交易和分析時。

2、在實時計算的功能中,要求可靠的事務機制和可靠性機制,即數(shù)據(jù)的處理完全精準,一條也不能多,一條也不能少,也可以考慮使用Storm,但是Spark Streaming也可以保證數(shù)據(jù)的不丟失。

3、如果我們需要考慮針對高峰低峰時間段,動態(tài)調(diào)整實時計算程序的并行度,以最大限度利用集群資源(通常是在小型公司,集群資源緊張的情況),我們也可以考慮用Storm

Spark Streaming

1、不滿足上述3點要求的話,我們可以考慮使用Spark Streaming來進行實時計算。

2、考慮使用Spark Streaming最主要的一個因素,應該是針對整個項目進行宏觀的考慮,即,如果一個項目除了實時計算之外,還包括了離線批處理、交互式查詢、圖計算和MLIB機器學習等業(yè)務功能,而且實時計算中,可能還會牽扯到高延遲批處理、交互式查詢等功能,那么就應該首選Spark生態(tài),用Spark Core開發(fā)離線批處理,用Spark SQL開發(fā)交互式查詢,用Spark Streaming開發(fā)實時計算,三者可以無縫整合,給系統(tǒng)提供非常高的可擴展性。

Flink
1.支持高吞吐、低延遲、高性能的流處理
2.支持帶有事件時間的窗口(Window)操作
3.支持有狀態(tài)計算的Exactly-once語義
4.支持高度靈活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
5.支持具有Backpressure功能的持續(xù)流模型
6.支持基于輕量級分布式快照(Snapshot)實現(xiàn)的容錯
7.一個運行時同時支持Batch on Streaming處理和Streaming處理
8.Flink在JVM內(nèi)部實現(xiàn)了自己的內(nèi)存管理
9.支持迭代計算
10.支持程序自動優(yōu)化:避免特定情況下Shuffle、排序等昂貴操作,中間結(jié)果有必要進行緩存
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI