關(guān)于Hadoop中Spark?Streaming的基本概念
前言
Spark Streaming是構(gòu)建在Spark上的實(shí)時(shí)計(jì)算框架,它擴(kuò)展了Spark處理大規(guī)模流式數(shù)據(jù)的能力。
Spark Streaming可結(jié)合批處理和交互式查詢,因此,可以適用于一些需要對(duì)歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)進(jìn)行結(jié)合分析的應(yīng)用場(chǎng)景。
流計(jì)算是一種典型的大數(shù)據(jù)計(jì)算模式,可以實(shí)現(xiàn)對(duì)源源不斷到達(dá)的流數(shù)據(jù)的實(shí)時(shí)處理分析。
一、靜態(tài)數(shù)據(jù)和流數(shù)據(jù)
1.靜態(tài)數(shù)據(jù)
如果把數(shù)據(jù)存儲(chǔ)系統(tǒng)比作一個(gè)“水庫(kù)”,那么,存儲(chǔ)在數(shù)據(jù)存儲(chǔ)系統(tǒng)中的靜態(tài)數(shù)據(jù)就像水庫(kù)中的水一樣,是靜止不動(dòng)的。
很多企業(yè)為了支持決策分析而構(gòu)建的數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)(見(jiàn)圖6-1),其中存放的大量歷史數(shù)據(jù)就是靜態(tài)數(shù)據(jù),這些數(shù)據(jù)來(lái)自不同的數(shù)據(jù)源,利用ETL(Extract-Transform-Load)工具加載到數(shù)據(jù)倉(cāng)庫(kù)中,并且不會(huì)發(fā)生更新,技術(shù)人員可以利用數(shù)據(jù)挖掘和OLAP(On-LineAnalytical Processing)分析工具從這些靜態(tài)數(shù)據(jù)中找到對(duì)企業(yè)有價(jià)值的信息。
2.流數(shù)據(jù)
流數(shù)據(jù)(或數(shù)據(jù)流)是指在時(shí)間分布和數(shù)量上無(wú)限的一系列動(dòng)態(tài)數(shù)據(jù)集合體;數(shù)據(jù)記錄是流數(shù)據(jù)的最小組成單元。流數(shù)據(jù)具有如下特征。
(1)數(shù)據(jù)快速持續(xù)到達(dá),潛在大小也許是無(wú)窮無(wú)盡的。
(2)數(shù)據(jù)來(lái)源眾多,格式復(fù)雜。
(3)數(shù)據(jù)量大,但是不十分關(guān)注存儲(chǔ),一旦流數(shù)據(jù)中的某個(gè)元素經(jīng)過(guò)處理,要么被丟棄,要么被歸檔存儲(chǔ)。
(4)注重?cái)?shù)據(jù)的整體價(jià)值,不過(guò)分關(guān)注個(gè)別數(shù)據(jù)。
(5)數(shù)據(jù)順序顛倒,或者不完整,系統(tǒng)無(wú)法控制將要處理的新到達(dá)的數(shù)據(jù)元素的順序。
二、流計(jì)算
1.流計(jì)算的基本概念
流計(jì)算是數(shù)據(jù)的價(jià)值隨著時(shí)間的流逝而降低。
因此,當(dāng)事件出現(xiàn)時(shí)就應(yīng)該立即進(jìn)行處理,而不是緩存起來(lái)進(jìn)行批量處理。
為了及時(shí)處理流數(shù)據(jù),就需要一個(gè)低延遲、可擴(kuò)展、高可靠的處理引擎。對(duì)于一個(gè)流計(jì)算系統(tǒng)來(lái)說(shuō),
流計(jì)算的特性:
(1)高性能。處理大數(shù)據(jù)的基本要求,如每秒處理幾十萬(wàn)條數(shù)據(jù)。
(2)海量式。支持TB級(jí)甚至是PB級(jí)的數(shù)據(jù)規(guī)模。
(3)實(shí)時(shí)性。必須保證一個(gè)較低的延遲時(shí)間,達(dá)到秒級(jí)別,甚至是毫秒級(jí)別。
(4)分布式。支持大數(shù)據(jù)的基本架構(gòu),必須能夠平滑擴(kuò)展。
(5)易用性。能夠快速進(jìn)行開(kāi)發(fā)和部署。
(6)可靠性。能可靠地處理流數(shù)據(jù)。
2.流計(jì)算處理流程
(1)數(shù)據(jù)實(shí)時(shí)采集
數(shù)據(jù)實(shí)時(shí)采集階段通常采集多個(gè)數(shù)據(jù)源的海量數(shù)據(jù),需要保證實(shí)時(shí)性、低延遲與穩(wěn)定可靠。以日志數(shù)據(jù)為例,由于分布式集群的廣泛應(yīng)用,數(shù)據(jù)分散存儲(chǔ)在不同的機(jī)器上,因此需要實(shí)時(shí)匯總來(lái)自不同機(jī)器上的日志數(shù)據(jù)。
數(shù)據(jù)采集系統(tǒng)的基本架構(gòu)一般有3個(gè)部分:
1)Agent:主動(dòng)采集數(shù)據(jù),并把數(shù)據(jù)推送到Collector部分。
2)Collector:接收多個(gè)Agent的數(shù)據(jù),并實(shí)現(xiàn)有序、可靠、高性能的轉(zhuǎn)發(fā)。
3)Store:存儲(chǔ)Collector轉(zhuǎn)發(fā)過(guò)來(lái)的數(shù)據(jù)。
(2)數(shù)據(jù)實(shí)時(shí)計(jì)算
數(shù)據(jù)實(shí)時(shí)計(jì)算階段對(duì)采集的數(shù)據(jù)進(jìn)行實(shí)時(shí)的分析和計(jì)算。流處理系統(tǒng)接收數(shù)據(jù)采集系統(tǒng)不斷發(fā)來(lái)的實(shí)時(shí)數(shù)據(jù),實(shí)時(shí)地進(jìn)行分析計(jì)算,并反饋實(shí)時(shí)結(jié)果。經(jīng)流處理系統(tǒng)處理后的數(shù)據(jù),可視情況進(jìn)行存儲(chǔ),以便之后再進(jìn)行分析計(jì)算。在時(shí)效性要求較高的場(chǎng)景中,處理之后的數(shù)據(jù)也可以直接丟棄。
(3)實(shí)時(shí)查詢服務(wù)
流計(jì)算的第三個(gè)階段是實(shí)時(shí)查詢服務(wù),經(jīng)由流計(jì)算框架得出的結(jié)果可供用戶進(jìn)行實(shí)時(shí)查詢、展示或儲(chǔ)存。
傳統(tǒng)的數(shù)據(jù)處理流程,用戶需要主動(dòng)發(fā)出查詢才能獲得想要的結(jié)果。
而在流處理流程中,實(shí)時(shí)查詢服務(wù)可以不斷更新結(jié)果,并將用戶所需的結(jié)果實(shí)時(shí)推送給用戶。
雖然通過(guò)對(duì)傳統(tǒng)的數(shù)據(jù)處理系統(tǒng)進(jìn)行定時(shí)查詢,也可以實(shí)現(xiàn)不斷更新結(jié)果和結(jié)果推送,但通過(guò)這樣的方式獲取的結(jié)果,仍然是根據(jù)過(guò)去某一時(shí)刻的數(shù)據(jù)得到的結(jié)果,與實(shí)時(shí)結(jié)果有著本質(zhì)的區(qū)別。
流處理系統(tǒng)與傳統(tǒng)的數(shù)據(jù)處理系統(tǒng)的區(qū)別
1)流處理系統(tǒng)處理的是實(shí)時(shí)的數(shù)據(jù),而傳統(tǒng)的數(shù)據(jù)處理系統(tǒng)處理的是預(yù)先存儲(chǔ)好的靜態(tài)數(shù)據(jù)。
2)用戶通過(guò)流處理系統(tǒng)獲取的是實(shí)時(shí)結(jié)果,而通過(guò)傳統(tǒng)的數(shù)據(jù)處理系統(tǒng)獲取的是過(guò)去某一時(shí)刻的結(jié)果。并且,流處理系統(tǒng)無(wú)需用戶主動(dòng)發(fā)出查詢,實(shí)時(shí)查詢服務(wù)可以主動(dòng)將實(shí)時(shí)結(jié)果推送給用戶。
三、Spark Streaming
1.Spark Streaming的定義
Spark Streaming 是個(gè)批處理的流式(實(shí)時(shí))計(jì)算框架。其基本原理是把輸入數(shù)據(jù)以某一時(shí)間間隔批量的處理,當(dāng)批處理間隔縮短到秒級(jí)時(shí),便可以用于處理實(shí)時(shí)數(shù)據(jù)流。
支持從多種數(shù)據(jù)源獲取數(shù)據(jù),包括Kafk、Flume、Twitter、ZeroMQ、Kinesis以及TCP sockets,從數(shù)據(jù)源獲取數(shù)據(jù)之后,可以使用諸如map、reduce、join等高級(jí)函數(shù)進(jìn)行復(fù)雜算法的處理。
最后還可以將處理結(jié)果存儲(chǔ)到文件系統(tǒng),數(shù)據(jù)庫(kù)等數(shù)據(jù)持久化系統(tǒng)。
2.Spark Streaming與Storm的對(duì)比
Spark Streaming和Storm最大的區(qū)別在于,Spark Streaming無(wú)法實(shí)現(xiàn)毫秒級(jí)的流計(jì)算,而Storm可以實(shí)現(xiàn)毫秒級(jí)響應(yīng)。
Spark Streaming無(wú)法實(shí)現(xiàn)毫秒級(jí)的流計(jì)算,是因?yàn)槠鋵⒘鲾?shù)據(jù)分解為一系列批處理作業(yè),在這個(gè)過(guò)程中,會(huì)產(chǎn)生多個(gè)Spark作業(yè),且每一段數(shù)據(jù)的處理都會(huì)經(jīng)過(guò)Spark DAG圖分解、任務(wù)調(diào)度等過(guò)程,需要一定的開(kāi)銷(xiāo),因此,無(wú)法實(shí)現(xiàn)毫秒級(jí)響應(yīng)。
Spark Streaming難以滿足對(duì)實(shí)時(shí)性要求非常高(如高頻實(shí)時(shí)交易)的場(chǎng)景,但足以勝任其他流式準(zhǔn)實(shí)時(shí)計(jì)算場(chǎng)景。
相比之下,Storm處理的數(shù)據(jù)單位為元組,只會(huì)產(chǎn)生極小的延遲。 Spark Streaming構(gòu)建在Spark上,一方面是因?yàn)镾park的低延遲執(zhí)行引擎(100ms+)可以用于實(shí)時(shí)計(jì)算,另一方面,相比于Storm,RDD數(shù)據(jù)集更容易做高效的容錯(cuò)處理。
此外,SparkStreaming采用的小批量處理的方式,使得它可以同時(shí)兼容批量和實(shí)時(shí)數(shù)據(jù)處理的邏輯和算法,因此,方便了一些需要?dú)v史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)聯(lián)合分析的特定應(yīng)用場(chǎng)合。
3.Spark Streaming 優(yōu)缺點(diǎn)
與傳統(tǒng)流式框架相比,Spark Streaming 最大的不同點(diǎn)在于它對(duì)待數(shù)據(jù)是粗粒度的處理方式,即一次處理一小批數(shù)據(jù),而其他框架往往采用細(xì)粒度的處理模式,即依次處理一條數(shù)據(jù)。
Spark Streaming 這樣的設(shè)計(jì)實(shí)現(xiàn)既為其帶來(lái)了顯而易見(jiàn)的優(yōu)點(diǎn),又引入了不可避免的缺點(diǎn)。
優(yōu)點(diǎn)
1)Spark Streaming 內(nèi)部的實(shí)現(xiàn)和調(diào)度方式高度依賴 Spark 的 DAG 調(diào)度器和 RDD,這就決定了 Spark Streaming 的設(shè)計(jì)初衷必須是粗粒度方式的,同時(shí),由于 Spark 內(nèi)部調(diào)度器足夠快速和高效,可以快速地處理小批量數(shù)據(jù),這就獲得準(zhǔn)實(shí)時(shí)的特性。
2)Spark Streaming 的粗粒度執(zhí)行方式使其確保“處理且僅處理一次”的特性,同時(shí)也可以更方便地實(shí)現(xiàn)容錯(cuò)恢復(fù)機(jī)制。
3)由于 Spark Streaming 的 DStream 本質(zhì)是 RDD 在流式數(shù)據(jù)上的抽象,因此基于 RDD 的各種操作也有相應(yīng)的基于 DStream 的版本,這樣就大大降低了用戶對(duì)于新框架的學(xué)習(xí)成本,在了解 Spark 的情況下用戶將很容易使用 Spark Streaming。
4)由于 DStream 是在 RDD 上的抽象,那么也就更容易與 RDD 進(jìn)行交互操作,在需要將流式數(shù)據(jù)和批處理數(shù)據(jù)結(jié)合進(jìn)行分析的情況下,將會(huì)變得非常方便。
缺點(diǎn)
Spark Streaming 的粗粒度處理方式也造成了不可避免的延遲。
在細(xì)粒度處理方式下,理想情況下每一條記錄都會(huì)被實(shí)時(shí)處理,而在 Spark Streaming 中,數(shù)據(jù)需要匯總到一定的量后再一次性處理,這就增加了數(shù)據(jù)處理的延遲,這種延遲是由框架的設(shè)計(jì)引入的,并不是由網(wǎng)絡(luò)或其他情況造成的。
到此這篇關(guān)于關(guān)于Hadoop中Spark Streaming的基本概念的文章就介紹到這了,更多相關(guān)Spark Streaming的基本概念內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot發(fā)送郵件功能的實(shí)現(xiàn)詳解
電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應(yīng)用最廣的服務(wù)。本文詳細(xì)為大家介紹了SpringBoot實(shí)現(xiàn)發(fā)送電子郵件功能的示例代碼,需要的可以參考一下2022-09-09Spring攔截器之HandlerInterceptor使用方式
這篇文章主要介紹了Spring攔截器之HandlerInterceptor使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08SpringBoot配置文件中數(shù)據(jù)庫(kù)密碼加密兩種方案(推薦)
SpringBoot項(xiàng)目經(jīng)常將連接數(shù)據(jù)庫(kù)的密碼明文放在配置文件里,安全性就比較低一些,尤其在一些企業(yè)對(duì)安全性要求很高,因此我們就考慮如何對(duì)密碼進(jìn)行加密,文中給大家介紹加密的兩種方式,感興趣的朋友一起看看吧2019-10-10SpringBoot項(xiàng)目攔截器獲取Post方法的請(qǐng)求body實(shí)現(xiàn)
本文主要介紹了SpringBoot項(xiàng)目攔截器獲取Post方法的請(qǐng)求body,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01AsyncHttpClient ListenableFuture源碼流程解讀
這篇文章主要為大家介紹了AsyncHttpClient ListenableFuture源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12springboot?整合表達(dá)式計(jì)算引擎?Aviator?使用示例詳解
本文詳細(xì)介紹了Google?Aviator?這款高性能、輕量級(jí)的?Java?表達(dá)式求值引擎,并通過(guò)詳細(xì)的代碼操作演示了相關(guān)API的使用以及如何在springboot項(xiàng)目中進(jìn)行集成,感興趣的朋友一起看看吧2024-08-08IDEA2020.1個(gè)性化設(shè)置的實(shí)現(xiàn)
這篇文章主要介紹了IDEA2020.1個(gè)性化設(shè)置的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Map映射LinkedHashSet與LinkedHashMap應(yīng)用解析
這篇文章主要為大家介紹了Map映射LinkedHashSet與LinkedHashMap的應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步2022-03-03java 圖片驗(yàn)證碼的實(shí)現(xiàn)代碼
java 圖片驗(yàn)證碼的實(shí)現(xiàn)代碼,需要的朋友可以參考一下2013-05-05