智能計算平臺應(yīng)用開發(fā)(中級)-第4章-數(shù)據(jù)采集-數(shù)據(jù)采集系統(tǒng)組成與架構(gòu)_第1頁
智能計算平臺應(yīng)用開發(fā)(中級)-第4章-數(shù)據(jù)采集-數(shù)據(jù)采集系統(tǒng)組成與架構(gòu)_第2頁
智能計算平臺應(yīng)用開發(fā)(中級)-第4章-數(shù)據(jù)采集-數(shù)據(jù)采集系統(tǒng)組成與架構(gòu)_第3頁
智能計算平臺應(yīng)用開發(fā)(中級)-第4章-數(shù)據(jù)采集-數(shù)據(jù)采集系統(tǒng)組成與架構(gòu)_第4頁
智能計算平臺應(yīng)用開發(fā)(中級)-第4章-數(shù)據(jù)采集-數(shù)據(jù)采集系統(tǒng)組成與架構(gòu)_第5頁
已閱讀5頁,還剩159頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第4章數(shù)據(jù)采集數(shù)據(jù)采集系統(tǒng)組成與架構(gòu)數(shù)據(jù)采集系統(tǒng)維護和流程優(yōu)化大數(shù)據(jù)采集與處理由于大數(shù)據(jù)環(huán)境下數(shù)據(jù)來源非常豐富且數(shù)據(jù)類型多樣,存儲和分析的數(shù)據(jù)量龐大,對數(shù)據(jù)質(zhì)量的要求較高,并且看重數(shù)據(jù)處理的高效性和可用性,所以產(chǎn)生了多種數(shù)據(jù)采集方式以獲取不同類型的數(shù)據(jù)源,并隨之產(chǎn)生了不同的數(shù)據(jù)處理方式。大數(shù)據(jù)采集與處理——大數(shù)據(jù)采集技術(shù)目前數(shù)據(jù)的采集主要分為線上采集和線下采集兩種。線上采集線下采集指通過傳感器、磁卡片、RFID技術(shù)等裝置或技術(shù),獲取用戶的線下行為數(shù)據(jù),建立用戶的行為數(shù)字數(shù)據(jù)庫。如利用傳感器的物理學原理,通過測試物品的溫度、濕度和電壓等物理符號來獲取數(shù)據(jù),將這些數(shù)學值轉(zhuǎn)換為可供人們使用的數(shù)字信息,并將所采集到的信息進行歸類、總結(jié),從而完成數(shù)據(jù)采集工作。大數(shù)據(jù)采集與處理——大數(shù)據(jù)采集技術(shù)線上采集線上采集則是通過軟件技術(shù)對各類網(wǎng)絡(luò)媒介的一些頁面信息、后臺系統(tǒng)日志進行采集。目前數(shù)據(jù)的線上采集方式基于互聯(lián)網(wǎng)網(wǎng)絡(luò)爬蟲的外部數(shù)據(jù)采集(如網(wǎng)站購物評價)基于日志采集技術(shù)的內(nèi)部數(shù)據(jù)采集(如網(wǎng)站用戶訪問日志收集)基于多種技術(shù)、行業(yè)多維度的多源數(shù)據(jù)采集(如采集來自政府數(shù)據(jù)、網(wǎng)站數(shù)據(jù)等影響股票趨勢的多維度數(shù)據(jù))……大數(shù)據(jù)采集與處理——大數(shù)據(jù)采集技術(shù)企業(yè)的應(yīng)用基本都有數(shù)據(jù)源系統(tǒng),數(shù)據(jù)源系統(tǒng)能夠產(chǎn)生系統(tǒng)的日志文件數(shù)據(jù),可用來對數(shù)據(jù)源系統(tǒng)發(fā)生的各項操作過程進行實時記錄,如一些Web服務(wù)器記錄的用戶訪問行為、網(wǎng)絡(luò)流量的實時監(jiān)管和金融軟件的股票記賬等。由于日志數(shù)據(jù)中包含了豐富的信息,能夠分析用戶的行為習慣,網(wǎng)站系統(tǒng)的運行情況等,所以對于日志數(shù)據(jù)的采集是企業(yè)中極為常見的業(yè)務(wù)。大數(shù)據(jù)采集與處理——大數(shù)據(jù)處理技術(shù)數(shù)據(jù)采集應(yīng)用一般都提供對采集到的數(shù)據(jù)進行簡單的過濾和處理的功能,但是要從數(shù)據(jù)中提取出有價值的信息,不能僅依靠采集工具本身的處理功能。在互聯(lián)網(wǎng)技術(shù)的應(yīng)用過程中,除了要實現(xiàn)多方面的數(shù)據(jù)采集功能外,還應(yīng)充分利用各種數(shù)據(jù)處理技術(shù),提取出更多有價值的信息,為企業(yè)的決策和發(fā)展提供準確、可靠的數(shù)據(jù)保障。目前比較流行的數(shù)據(jù)處理方法批處理模式,數(shù)據(jù)形式是靜態(tài)數(shù)據(jù)流處理模式,數(shù)據(jù)形式是動態(tài)數(shù)據(jù)大數(shù)據(jù)采集與處理——大數(shù)據(jù)處理技術(shù)批處理主要應(yīng)用在靜態(tài)數(shù)據(jù)的處理過程中對靜態(tài)數(shù)據(jù)的處理,主要是先對原始用戶的數(shù)據(jù)進行分塊釋義,然后通過不同的任務(wù)處理區(qū)來進行數(shù)據(jù)處理,并得出最終結(jié)論。針對需要先進行存儲再進行計算的大數(shù)據(jù),批處理技術(shù)是十分適合的,因而批處理技術(shù)在國內(nèi)各領(lǐng)域得到了廣泛運用。此外,在對一些實時數(shù)據(jù)進行處理時,可使用批處理技術(shù)下的交互式數(shù)據(jù)分析系統(tǒng)完成。大數(shù)據(jù)采集與處理——大數(shù)據(jù)處理技術(shù)流處理相對于以往的流式處理方法,交互式的數(shù)據(jù)處理方法能夠?qū)崟r數(shù)據(jù)進行靈活處理,并且便于對數(shù)據(jù)信息進行控制,為后期人們進行數(shù)據(jù)讀取和使用提供了更多的便利。常見的應(yīng)用實例是:對網(wǎng)絡(luò)上服務(wù)器實時采集的PB級別的日志數(shù)據(jù)進行處理時,要求處理時間縮短到秒級,從而在短時間內(nèi)為人們呈現(xiàn)出更多可靠、準確的信息。大數(shù)據(jù)采集與處理——大數(shù)據(jù)處理技術(shù)由于當下電子設(shè)備的技術(shù)革新和普遍應(yīng)用,更多的圖像、音頻和視頻信息出現(xiàn)在信息源中。其中,圖像數(shù)據(jù)耦合的特性對圖的規(guī)模增大到上百萬甚至上億節(jié)點的圖計算提出了巨大的挑戰(zhàn)。與此同時,在對大量圖片數(shù)據(jù)進行處理時,圖片數(shù)據(jù)源的關(guān)鍵字查詢技術(shù)和圖片的存儲分析技術(shù)發(fā)揮了更大的作用。在這兩項技術(shù)的應(yīng)用過程中,通過尋找兩者之間存在的共性,將圖片中的數(shù)據(jù)信息進行挖掘與計算,并在互聯(lián)網(wǎng)模型的支撐下,將這些數(shù)據(jù)進行大批量處理。大數(shù)據(jù)采集與處理——大數(shù)據(jù)處理技術(shù)目前,圖片數(shù)據(jù)源的關(guān)鍵字查詢技術(shù)和圖片的存儲分析技術(shù)已經(jīng)在網(wǎng)絡(luò)安全和公共安全領(lǐng)域得到廣泛的運用。如通過大數(shù)據(jù)處理對用戶感興趣的內(nèi)容進行推薦,包括微博的推薦閱讀、微信的公眾號推薦和一些視頻流量軟件或平臺的用戶視頻選取推送等。此外,圖片數(shù)據(jù)源的關(guān)鍵字查詢技術(shù)和圖片的存儲分析技術(shù)在交通、環(huán)境管理和物流快遞的線路規(guī)劃中也能得到一定的應(yīng)用。大數(shù)據(jù)基礎(chǔ)組件介紹目前國內(nèi)外常用的數(shù)據(jù)采集工具有Flume、Loader和Kafka等,常用的數(shù)據(jù)處理工具有MapReduce、Spark、Storm和Flink等,這些工具都是支持分布式架構(gòu)的大數(shù)據(jù)組件?!獓鴥?nèi)外常用的數(shù)據(jù)采集工具——國內(nèi)外常用的數(shù)據(jù)處理工具—……大數(shù)據(jù)基礎(chǔ)組件介紹——Flume一個Flume的Agent可以連接一個或多個其他的Agent,一個Agent也可以從一個或多個其他的Agent接收數(shù)據(jù),從而通過多個相互連接的Agent,建立一個流式處理作業(yè)。這個Flume的Agent鏈條可以實現(xiàn)將數(shù)據(jù)從一個位置移動到另一個位置,如將數(shù)據(jù)從生產(chǎn)數(shù)據(jù)的應(yīng)用程序移動到HDFS、HBase等。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)每一個Agent包含3個組件:Source、Channel和Sink。一個Agent事件如下圖大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)SourceSource是負責接收數(shù)據(jù)到Agent的組件,可以從其他系統(tǒng)接收數(shù)據(jù),如Java消息服務(wù)(JMS)、其他應(yīng)用處理輸出的結(jié)果、其他Agent的Sink通過RPC協(xié)議發(fā)送的數(shù)據(jù)等。Source自身也可以生產(chǎn)數(shù)據(jù),但通常用于測試。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Source的類型可以分為驅(qū)動型和輪詢型兩種。每個Source都需要連接一個或多個Channel,并將數(shù)據(jù)寫入到一個或多個Channel中。驅(qū)動型是指外部發(fā)送數(shù)據(jù)給Flume,驅(qū)動Flume接受數(shù)據(jù)。輪詢型是指Flume周期性主動去獲取數(shù)據(jù)。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Source寫入數(shù)據(jù)到Channel的過程需要通過Channel處理器、攔截器和Channel選擇器。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Channel處理器每個Source都有自己的Channel處理器,每次Source將數(shù)據(jù)寫入Channel時,通過委派該任務(wù)到其Channel處理器來完成。Channel處理器將事件傳到一個或多個攔截器攔截器負責讀取事件并進行修改或刪除,攔截器處理后將事件傳給Channel選擇器Channel選擇器返回寫入事件的Channel列表,為每個事件選擇寫入的Channel攔截器是一段代碼。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Source與Agent中的其他組件都需要通過配置文件進行配置。Flume的配置系統(tǒng)會驗證每個Source的配置,并屏蔽錯誤配置(缺少配置或缺少必要的參數(shù))的Source。配置系統(tǒng)驗證通過的Source會被實例化并進行配置,配置成功后,F(xiàn)lume的生命周期管理系統(tǒng)將會嘗試啟動Source。只有Agent自身停止或被殺死,或者Agent被用戶重新配置時,Source才會停止。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Source常見的類型Source類型描述ExecSource執(zhí)行某個命令或腳本,可以將命令產(chǎn)生的輸出作為源AvroSource監(jiān)聽Avro端口來接收外部Avro客戶端的事件流ThriftSource同Avro,傳輸協(xié)議為ThriftHttpSource接受HTTP的GET和POST請求作為Flume的事件SyslogSource采集系統(tǒng)SyslogSpoolingdirectorySource采集本地靜態(tài)文件JMSSource從消息隊列獲取數(shù)據(jù)KafkaSource從Kafka中獲取數(shù)據(jù)大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)配置數(shù)據(jù)源的時候,在配置文件中需要保證:每個Source至少連接一個配置正確的Channel每個Source有一個定義的type參數(shù),即設(shè)置數(shù)據(jù)源的類型;配置的Source需要在配置文件中設(shè)置屬于某個Agent。如采集一個Avro端口的事件時,需要在配置文件中進行配置,代碼如下所示。a1.sources=r1a1.channels=c1a1.sinks=s1#描述配置a1的source1a1.sources.r1.type=avroa1.sources.r1.bind=#要監(jiān)聽的主機名或IPa1.sources.r1.port=44444#監(jiān)聽的端口a1.sources.r1.channels=c1大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)ChannelChannel是位于Source與Sink之間的緩沖區(qū),行為類似于隊列(先進先出),負責緩沖Source寫入的數(shù)據(jù)并提供給Sink讀取,使Source和Sink能夠以不同速率運作。Channel允許多個Source寫入數(shù)據(jù)到相同的Channel,并且多個Sink可以從相同的Channel讀取數(shù)據(jù),但是一個Channel中的一個事件只能被一個Sink讀取,被Sink安全讀取的事件將會被通知從Channel中刪除。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Channel具有事務(wù)性特征事務(wù)的本質(zhì)是原子性寫入Channel的批量事件(Event),事件要么全部成功保存在Channel中,要么全部失敗。同樣的,當Sink從Channel中讀取事件寫入其他存儲時,如果寫入失敗,那么事件會回滾到Channel中,并被這個可用的Sink或其他Sink讀取。Channel的事務(wù)性特征是Flume保證數(shù)據(jù)不丟失的關(guān)鍵。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)常見的Channel類型MemoryChannelFileChannelJDBCChannel3種Channel類型具有不同的持久化水平。MemoryChannel和FileChannel屬于Flume內(nèi)置的Channel,并且是線程完全安全的,可以同時處理多個Source的寫入操作和多個Sink的讀取操作。MemoryChannelMemoryChannel是內(nèi)存中的Channel,在堆上存儲寫入的事件。MemoryChannel是內(nèi)存中的隊列,Source從隊列的尾部寫入事件,Sink從隊列的頭部讀取事件。因為MemoryChannel在內(nèi)存中存儲數(shù)據(jù),所以MemoryChannel支持很高的吞吐量。MemoryChannel適用于不關(guān)心數(shù)據(jù)丟失的情景,因為MemoryChannel沒有將數(shù)據(jù)持久化到磁盤。如果關(guān)心數(shù)據(jù)丟失,那么MemoryChannel就不適合使用,因為程序死亡、機器宕機或重啟都會導致數(shù)據(jù)丟失。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)FileChannelFlume的持久化ChannelFileChannel將所有事件寫到磁盤中,因此在程序關(guān)閉或機器宕機的情況下不會丟失數(shù)據(jù),只有當Sink取走事件并提交給事務(wù)時,Channel的事件才從Channel移除。JDBCChannelJDBCChannel基于嵌入式DataBase實現(xiàn),支持本身內(nèi)置的Derby數(shù)據(jù)庫,對Event(事件)進行了持久化,提供高可靠性,可以取代具有持久性特性的FileChannel。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Channel的設(shè)置同樣需要通過配置文件實現(xiàn)。如一個MemoryChannel的配置,代碼如下所示。#配置Agenta1的組件a1.sources=r1a1.channels=c1a1.sinks=s1#配置MemoryChannela1.channels.c1.type=memory#Channel類型a1.channels.c1.capacity=1000#Channel能保證的提交事件的最大數(shù)量a1.channels.c1.transactionCapacity=100#單個事務(wù)被取走或?qū)懭氲氖录淖畲髷?shù)量大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)SinkSink是Agent的組件,用于取出Channel的數(shù)據(jù)寫入另一個Agent、其他數(shù)據(jù)存儲或其他系統(tǒng)組件。Sink具有事務(wù)性特征,在從Channel批量移除數(shù)據(jù)之前,每個Sink用Channel啟動一個事務(wù)。當批量事件一旦成功寫出到存儲系統(tǒng)或下一個Agent時,Sink就利用Channel提交事務(wù)。事務(wù)一旦被提交,該Channel則會從自己的內(nèi)部緩沖區(qū)刪除事件。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Flume封裝了很多Sink,可以寫到HDFS、HBase、Solr、ElasticSearch等存儲和索引系統(tǒng)。Sink采用標準的Flume配置系統(tǒng)進行配置因此,配置Sink需要保證:每個Sink至少連接一個正確配置的Channel,每個Sink有一個定義的type參數(shù),Sink必須屬于一個Agent。每個Agent可以有0個或多個Sink。每個Sink只能連接一個Channel讀取事件。如果沒有配置Channel,Sink就會被移除出Agent。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)Sink類型說明HDFSSink將數(shù)據(jù)寫到HDFSAvroSink使用Avro協(xié)議將數(shù)據(jù)發(fā)送到另一個Flume的AgentThriftSink同Avro,傳輸協(xié)議為ThriftFilerollSink將數(shù)據(jù)保存到本地文件系統(tǒng)中HBaseSink將數(shù)據(jù)寫到HBase中KafkaSink將數(shù)據(jù)寫入Kafka組件中MorphlineSolrSink將數(shù)據(jù)寫入到Solr中常見的Sink類型大數(shù)據(jù)基礎(chǔ)組件介紹——Flume架構(gòu)例如,將Channel數(shù)據(jù)寫入Linux本地文件系統(tǒng)的配置,配置文件中Sink配置內(nèi)容代碼如下所示。#配置Agenta1的組件a1.sources=r1a1.channels=c1a1.sinks=s1#描述Sinka1.sinks.s1.type=file_rolla1.sinks.s1.sink.directory=/opt/mysink大數(shù)據(jù)基礎(chǔ)組件介紹——Flume關(guān)鍵特性Flume的關(guān)鍵特性支持采集日志文件支持多級級聯(lián)和多路復制級聯(lián)消息支持壓縮和加密提供度量框架可靠性傳輸過程中的數(shù)據(jù)過濾大數(shù)據(jù)基礎(chǔ)組件介紹——Flume關(guān)鍵特性支持采集日志文件Flume支持將集群外的日志文件采集并歸檔到HDFS、HBase、Kafka上,供上層應(yīng)用進行數(shù)據(jù)分析和數(shù)據(jù)清洗。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume關(guān)鍵特性支持多級級聯(lián)和多路復制多級級聯(lián)和多路復制圖Flume支持將多個Agent級聯(lián)起來。同時Agent內(nèi)部支持多路復制。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume關(guān)鍵特性級聯(lián)消息支持壓縮和加密Flume級聯(lián)節(jié)點之間的數(shù)據(jù)傳輸支持壓縮和加密,從而提升數(shù)據(jù)傳輸效率和安全性。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume關(guān)鍵特性提供度量框架Flume有一個度量框架,通過JavaManagementExtensions(JMX)、HTTP或Ganglia服務(wù)器展示出度量,用于查看Source、Channel和Sink的完整狀態(tài)??煽啃訤lume在數(shù)據(jù)傳輸過程中,采用事務(wù)管理方式,保證傳輸過程中數(shù)據(jù)不會丟失,增強了數(shù)據(jù)傳輸?shù)目煽啃?,同時緩存在Channel中的數(shù)據(jù)如果采用FileChannel,那么進程或者節(jié)點重啟時數(shù)據(jù)就不會丟失。大數(shù)據(jù)基礎(chǔ)組件介紹——Flume關(guān)鍵特性傳輸過程中的數(shù)據(jù)過濾Flume在數(shù)據(jù)傳輸過程中,可以對數(shù)據(jù)進行簡單的過濾、清洗,去掉不關(guān)心的數(shù)據(jù)。如果對復雜的數(shù)據(jù)過濾,那么需要用戶根據(jù)自己的數(shù)據(jù)特殊性,開發(fā)過濾插件。Flume支持第三方過濾插件調(diào)用。大數(shù)據(jù)基礎(chǔ)組件介紹——LoaderLoaderFusionInsightHDLoader是基于Sqoop開發(fā)的數(shù)據(jù)遷移工具,但是比Sqoop擁有更加豐富的管理功能,能實現(xiàn)FusionInsightHD與外部數(shù)據(jù)源(如關(guān)系型數(shù)據(jù)庫、SFTP服務(wù)器、FTP服務(wù)器)之間數(shù)據(jù)和文件交換,支持將數(shù)據(jù)或文件從關(guān)系型數(shù)據(jù)庫或文件系統(tǒng)導入到FusionInsightHD系統(tǒng)中。大數(shù)據(jù)基礎(chǔ)組件介紹——Loader目前Loader支持的導入場景從關(guān)系型數(shù)據(jù)庫導入數(shù)據(jù)到HDFS、HBase、Phoenix表和Hive表。從SFTP服務(wù)器導入文件到HDFS、HBase、Phoenix表和Hive表。從FTP服務(wù)器導入文件到HDFS、HBase、Phoenix表和Hive表。從同一集群內(nèi)HDFS導入文件到HBase?!髷?shù)據(jù)基礎(chǔ)組件介紹——LoaderLoader支持的導出場景從HDFS中導出文件到SFTP服務(wù)器、關(guān)系型數(shù)據(jù)庫。從HBase中導出文件到SFTP服務(wù)器、關(guān)系型數(shù)據(jù)庫。從同一集群內(nèi)HBase導出文件到HDFS?!髷?shù)據(jù)基礎(chǔ)組件介紹——LoaderLoader在FusionInsightHD的架構(gòu)圖大數(shù)據(jù)基礎(chǔ)組件介紹——LoaderLoader在FusionInsightHD的架構(gòu)的主要模塊名稱描述LoaderClientLoader的客戶端LoaderServerLoader的服務(wù)端,主要功能包括處理客戶端請求、管理連接器和元數(shù)據(jù)RESTAPI實現(xiàn)RESTful(HTTP+JSON)接口,用于處理來自客戶端的請求JobScheduler簡單的作用調(diào)度模塊,支持周期性的執(zhí)行Loader作業(yè)TransformEngine數(shù)據(jù)轉(zhuǎn)換處理引擎,支持字段合并、字符串剪切、字符串反序等ExecutionEngine作業(yè)執(zhí)行引擎,包含MapReduce作業(yè)的詳細處理邏輯SubmissionEngine作業(yè)提交引擎,支持將作業(yè)提交給MapReduce執(zhí)行JobManager管理Loader作業(yè),包括創(chuàng)建作業(yè)、查詢作業(yè)、更新作業(yè)、刪除作業(yè)、激活作業(yè)、啟動作業(yè)、停止作業(yè)MetadataRepository元數(shù)據(jù)倉庫,用于存儲和管理Loader的連接器、轉(zhuǎn)換步驟、作業(yè)等數(shù)據(jù)HAManager管理LoaderServer進程的主備狀態(tài),LoaderServer包含兩個節(jié)點,以主備方式部署大數(shù)據(jù)基礎(chǔ)組件介紹——LoaderLoader提供的作業(yè)管理界面,能夠簡單地創(chuàng)建出數(shù)據(jù)遷移任務(wù),并對其進行管理。Loader主要提供的管理服務(wù)服務(wù)狀態(tài)監(jiān)控界面用于監(jiān)控Loader的健康狀況;作業(yè)管理界面用于創(chuàng)建作業(yè)并監(jiān)控作業(yè)執(zhí)行狀態(tài)等。相比Sqoop,基于Sqoop開發(fā)的企業(yè)應(yīng)用(如Loader)在對任務(wù)的監(jiān)控管理上的功能使得用戶能夠更加快速有效地創(chuàng)建數(shù)據(jù)采集、數(shù)據(jù)遷移的任務(wù),并對任務(wù)進行有效的監(jiān)控,大大提高了數(shù)據(jù)采集的安全性和穩(wěn)定性。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka概念與發(fā)展歷程KafkaKafka是一款開源的、輕量級的、分布式、可分區(qū)、具有復制備份的(Replicated)和基于ZooKeeper協(xié)調(diào)管理的消息系統(tǒng),也是一個功能強大的分布式流平臺。與傳統(tǒng)的消息系統(tǒng)相比,Kafka能夠很好地處理活躍的流數(shù)據(jù),使得數(shù)據(jù)在各個子系統(tǒng)中高性能、低延遲地不停流轉(zhuǎn)。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka概念與發(fā)展歷程據(jù)Kafka官方網(wǎng)站介紹,Kafka的定位是一個分布式流處理平臺,滿足3個關(guān)鍵特性。Kafka關(guān)鍵特性能夠允許發(fā)布和訂閱流數(shù)據(jù);存儲流數(shù)據(jù)時提供相應(yīng)的容錯機制;當流數(shù)據(jù)到達時能夠被及時處理。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka概念與發(fā)展歷程Kafka發(fā)展歷程Kafka最早是由美國領(lǐng)英公司(Linkedln)的工程師們研發(fā)的。隨著Kafka的不斷完善,Kafka日益成為一個通用的數(shù)據(jù)管道,同時兼具高性能和高伸縮性。當時主要用于解決Linkedln數(shù)據(jù)管道(datapipeline)的問題。在Linkedln中,Kafka既用于在線系統(tǒng),也用于離線系統(tǒng)。既從上游系統(tǒng)接收數(shù)據(jù),也會給下游系統(tǒng)輸送數(shù)據(jù)。既提供消息的流轉(zhuǎn)服務(wù),也用于數(shù)據(jù)的持久化存儲。因此,Kafka逐漸發(fā)展成Linkedln內(nèi)部的基礎(chǔ)設(shè)施,承接了大量的上下游子系統(tǒng)。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka概念與發(fā)展歷程Linkedln公司在2010年底正式將Kafka開源,并將源碼貢獻給了Apache軟件基金會。2011年7月,Kafka正式進入Apache進行孵化,并于2012年10月正式發(fā)布。消息持久化Kafka高度依賴于文件系統(tǒng)來存儲和緩存消息。正是由于Kafka將消息進行持久化,使得Kafka在機器重啟后,已存儲的消息可繼續(xù)恢復使用。同時Kafka能夠很好地支持在線或離線處理與其他存儲及流處理框架的集成。Kafka提供了相關(guān)配置讓用戶自己決定消息要保存多久,為消費者提供了更靈活的處理方式,因此Kafka能夠在沒有性能損失的情況下提供一般消息系統(tǒng)不具備的特性。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點高吞吐量高吞吐量是Kafka設(shè)計的主要目標,Kafka利用磁盤的順序讀寫方式將數(shù)據(jù)寫入到磁盤中,使得用普通磁盤就可以達到很高的吞吐量。同時,Kafka在數(shù)據(jù)寫入和數(shù)據(jù)同步時采用了零拷貝(zero-copy)技術(shù),在兩個文件描述符之間可直接傳遞數(shù)據(jù),并完全在內(nèi)核中操作,從而避免了內(nèi)核緩沖區(qū)與用戶緩沖區(qū)之間數(shù)據(jù)的拷貝,操作效率極高。Kafka還支持數(shù)據(jù)壓縮及批量發(fā)送,同時Kafka將每個主題劃分為多個分區(qū),這一系列的優(yōu)化及實現(xiàn)方法使得Kafka具有很高的吞吐量。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點擴展性Kafka依賴ZooKeeper對集群進行協(xié)調(diào)管理,使得Kafka更加容易進行水平擴展。由于生產(chǎn)者(Producer)、消費者(Consumer)和代理(Broker)都支持分布式架構(gòu),所以Kafka集群可配置多個生產(chǎn)者、消費者和代理。同時在機器擴展時無須將整個集群停機,集群能夠自動感知新增節(jié)點,可以重新進行負載均衡及數(shù)據(jù)復制。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點多客戶端支持Kafka提供了多種開發(fā)語言的接入,如Java、Scala、C、C++、Python、Go、Erlang、Ruby、Node.js等。Kafka與當前主流的大數(shù)據(jù)框架都能很好地集成,如Flume、Hadoop、HBase、Hive、Spark、Storm等。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點KafkaStreamsKafka在0.10之后的版本中引入KafkaStreams。KafkaStreams是一個使用ApacheKafka來構(gòu)造分布式流處理程序的Java庫。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點安全機制當前版本的Kafka支持幾種安全措施。其中,SASL/PLAIN驗證機制支持生產(chǎn)者、消費者與代理連接時的身份認證、代理與ZooKeeper連接身份驗證、通信時數(shù)據(jù)加密、客戶端讀與寫權(quán)限認證、外部其他認證授權(quán)服務(wù)的集成。數(shù)據(jù)備份Kafka可以為每個主題指定副本數(shù),對數(shù)據(jù)進行持久化備份,在一定程度上防止數(shù)據(jù)丟失,提高可用性。輕量級Kafka的代理是無狀態(tài)的,即代理不記錄消息是否被消費,消費偏移量的管理交由消費者自己或組協(xié)調(diào)器來維護。同時集群本身幾乎不需要生產(chǎn)者和消費者的狀態(tài)信息,所以Kafka是輕量級的。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka特點消息壓縮Kafka支持Gzip、Snappy、LZ4這3種壓縮方式,通常把多條消息放在一起組成MessageSet,再把MessageSet放到一條消息中,從而提高壓縮比率進而提高吞吐量。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka應(yīng)用場景消息系統(tǒng)或消息隊列中間件是當前處理大數(shù)據(jù)的非常重要的組件,用于解決應(yīng)用解耦、異步通信、流量控制等問題,從而構(gòu)建一個高效、靈活、消息同步和異步傳輸處理、存儲轉(zhuǎn)發(fā)、可伸縮和最終一致性的穩(wěn)定系統(tǒng)。Kafka應(yīng)用場景消息系統(tǒng)應(yīng)用監(jiān)控網(wǎng)站用戶行為追蹤流處理持久性日志大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka應(yīng)用場景消息系統(tǒng)Kafka作為一款優(yōu)秀的消息系統(tǒng),具有高吞吐量、內(nèi)置分區(qū)、備份冗余分布式等特點,為大規(guī)模消息處理提供了一種很好的解決方案。應(yīng)用監(jiān)控利用Kafka采集應(yīng)用程序和服務(wù)器健康相關(guān)的指標,如CPU占用率、IO(網(wǎng)絡(luò)傳輸量)、內(nèi)存、連接數(shù)、TPS(吞吐量)等,然后將指標信息進行處理,從而構(gòu)建一個具有監(jiān)控儀表盤、曲線圖等可視化監(jiān)控系統(tǒng)。如很多公司采用Kafka與ELK(ElasticSearch、Logstash和Kibana)整合構(gòu)建應(yīng)用服務(wù)監(jiān)控系統(tǒng)。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka應(yīng)用場景網(wǎng)站用戶行為追蹤為了更好地了解用戶行為、操作習慣,改善用戶體驗,進而對產(chǎn)品升級改進,可以將用戶操作軌跡、內(nèi)容等信息發(fā)送到Kafka集群上,通過Hadoop、Spark或Storm等進行數(shù)據(jù)分析處理,生成相應(yīng)的統(tǒng)計報告,為推薦系統(tǒng)推薦對象建模提供數(shù)據(jù)源,進而為每個用戶進行個性化推薦。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka應(yīng)用場景流處理可通過Kafka收集流數(shù)據(jù)提供給其他流式計算框架進行處理,當前版本的Kafka提供了KafkaStreams支持對流數(shù)據(jù)的處理。持久性日志Kafka可以為外部系統(tǒng)提供一種持久性日志的分布式系統(tǒng)。日志可以在多個節(jié)點間進行備份,Kafka為故障節(jié)點數(shù)據(jù)恢復提供了一種重新同步的機制。同時,Kafka可以很方便與HDFS、Flume進行整合,實現(xiàn)將Kafka采集的數(shù)據(jù)持久化到其他外部系統(tǒng)。Kafka的體系架構(gòu)圖Kafka的核心架構(gòu)可以總結(jié)為生產(chǎn)者向Kafka服務(wù)器發(fā)送消息,消費者從Kafka集群服務(wù)器讀取消息Kafka集群服務(wù)器依托ZooKeeper集群進行服務(wù)的協(xié)調(diào)管理。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成在Kafka生產(chǎn)、存儲、消費數(shù)據(jù)的過程中,會涉及以下幾個常見概念。主題Kafka將一組消息抽象歸納為一個主題(Topic),即一個主題就是對消息的一個分類。生產(chǎn)者將消息發(fā)送到特定主題,消費者訂閱主題或主題的某些分區(qū)進行消費。消息消息是Kafka通信的基本單位,由一個固定長度的消息頭和一個可變長度的消息體構(gòu)成。在老版本中,每一條消息稱為Message,在由Java重新實現(xiàn)的客戶端中,每一條消息稱為Record。分區(qū)和副本Kafka將一組消息歸納為一個主題,而每個主題又被分成一個或多個分區(qū)(Partition)。每個分區(qū)由一系列有序、不可變的消息組成,是一個有序隊列。每個分區(qū)有一至多個副本(Replica),分區(qū)的副本分布在集群的不同代理上,以提高可用性。從存儲角度上分析,分區(qū)的每個副本在邏輯上抽象為一個日志(Log)對象,即分區(qū)的副本與日志對象是一一對應(yīng)的。每個主題對應(yīng)的分區(qū)數(shù)可以在Kafka啟動時所加載的配置文件中配置,也可以在創(chuàng)建主題時指定。當然,客戶端還可以在主題創(chuàng)建后修改主題的分區(qū)數(shù)。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成分區(qū)使得Kafka在并發(fā)處理上變得更加容易。一般情況下,分區(qū)數(shù)越多吞吐量越高,但這要根據(jù)集群實際環(huán)境及業(yè)務(wù)場景確定。分區(qū)也是Kafka保證消息被順序消費以及對消息進行負載均衡的基礎(chǔ)。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成被追加到相應(yīng)的分區(qū)中,并按照順序?qū)懭氪疟P,因此效率非常高,這也是Kafka高吞吐率的一個重要保證。同時與傳統(tǒng)消息系統(tǒng)不同的是,Kafka并不會立即刪除已被消費的消息。由于磁盤的限制消息也不會一直被存儲(事實上這也是沒有必要的),因此Kafka提供兩種刪除老數(shù)據(jù)的策略。刪除老數(shù)據(jù)的策略基于消息已存儲的時間長度基于分區(qū)的大小Leader副本和Follower副本由于Kafka副本的存在,所以需要保證一個分區(qū)的多個副本之間數(shù)據(jù)的一致性。Kafka會選擇該分區(qū)的一個副本作為Leader副本,而該分區(qū)其他副本即為Follower副本。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成只有Leader副本才負責處理客戶端讀寫請求。Follower副本從Leader副本同步數(shù)據(jù)。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成偏移量任何發(fā)布到分區(qū)的消息都會被直接追加到日志文件(分區(qū)目錄下以“.log”為文件名后綴的數(shù)據(jù)文件)的尾部,而每條消息在日志文件中的位置都會對應(yīng)一個按序遞增的偏移量。偏移量是一個分區(qū)下嚴格有序的邏輯值,它并不表示消息在磁盤上的物理位置。由于Kafka幾乎不允許對消息進行隨機讀寫,因此Kafka并沒有提供額外索引機制到存儲偏移量,即并不會給偏移量再提供索引。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成消費者可以通過控制消息偏移量來對消息進行消費,如消費者可以指定消費的起始偏移量。為了保證消息被順序消費,消費者已消費的消息對應(yīng)的偏移量也需要保存。消費者對消息偏移量的操作并不會影響消息本身的偏移量。消費者也可以自己在外部系統(tǒng)保存消費偏移量,而無須保存到Kafka中。舊版消費者將消費偏移量保存到ZooKeeper當中。新版消費者是將消費偏移量保存到Kafka內(nèi)部一個主題當中。代理Kafka集群是由一個或多個Kafka實例構(gòu)成,每一個Kafka實例稱為代理(Broker),通常也稱代理為Kafka服務(wù)器(KafkaServer)。在生產(chǎn)環(huán)境中Kafka集群一般包括一臺或多臺服務(wù)器,可以在一臺服務(wù)器上配置一個或多個代理。每一個代理都有唯一的標識id,這個id是一個非負整數(shù)。在一個Kafka集群中,每增加一個代理就需要為這個代理配置一個與該集群中其他代理不同的id,這個id就是代理的名字,也就是在啟動代理時配置的broker.id對應(yīng)的值。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成生產(chǎn)者生產(chǎn)者(Producer)負責將消息發(fā)送給代理,也就是向Kafka代理發(fā)送消息的客戶端。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成消費者和消費組消費者(Comsumer)以拉?。╬ull)方式拉取數(shù)據(jù),它是消費的客戶端。在Kafka中每一個消費者都屬于一個特定消費組(ConsumerGroup),用戶可以為每個消費者指定一個消費組,以groupId代表消費組名稱。如果不指定消費組,那么該消費者屬于默認消費組test-consumer-group。同時,每個消費者也有一個全局唯一的id,如果客戶端沒有指定消費者的id,Kafka會自動為該消費者生成一個全局唯一的id。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成消費組是Kafka用來實現(xiàn)對一個主題消息進行廣播和單播的手段。同一個主題的一條消息只能被同一個消費組下某一個消費者消費。不同消費組的消費者可同時消費該消息。要實現(xiàn)消息廣播只需指定各個消費者均屬于不同的消費組。要實現(xiàn)消息單播則只需讓各個消費者屬于同一個消費組。ZooKeeperKafka利用ZooKeeper保存相應(yīng)元數(shù)據(jù)信息。Kafka元數(shù)據(jù)信息包括代理節(jié)點信息、Kafka集群信息、舊版消費者信息、消費偏移量信息、主題信息、分區(qū)狀態(tài)信息、分區(qū)副本分配方案信息和動態(tài)配置信息等。Kafka在啟動或運行過程中會在ZooKeeper上創(chuàng)建相應(yīng)節(jié)點來保存元數(shù)據(jù)信息,Kafka通過監(jiān)聽機制在這些節(jié)點注冊相應(yīng)監(jiān)聽器來監(jiān)聽節(jié)點元數(shù)據(jù)的變化,從而由ZooKeeper負責管理維護Kafka集群,同時通過ZooKeeper能夠很方便地對Kafka集群進行水平擴展及數(shù)據(jù)遷移。大數(shù)據(jù)基礎(chǔ)組件介紹——Kafka基本組成大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce隨著互聯(lián)網(wǎng)時代的到來,軟件編程方式發(fā)生了重大的變革,基于大規(guī)模計算機集群的分布式并行編程成為將來軟件性能提升的主要途徑?;诩旱姆植际讲⑿芯幊棠軌蜃屲浖c數(shù)據(jù)同時運行在連成一個網(wǎng)絡(luò)的許多臺計算機上,由此獲得海量計算能力。集群中的每一臺計算機均可以是一臺普通的PC機。分布式并行環(huán)境的優(yōu)點可以很容易地通過增加計算機來擴充新的計算節(jié)點,并由此獲得海量計算能力;同時又具有相當強的容錯能力,當一批計算節(jié)點失效時,也不會影響計算的正常進行和結(jié)果的正確性。Google基于這種并行編程思想開發(fā)了MapReduce并行編程模型進行分布式并行編程,運行在GFS(GoogleFileSystem)的分布式文件系統(tǒng)上,為全球億萬用戶提供搜索服務(wù)。大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduceHadoop實現(xiàn)了Google的MapReduce編程模型,不僅提供了簡單易用的編程接口,還提供了自己開發(fā)的分布式文件系統(tǒng)HDFS。與Google不同的是,Hadoop是開源的,任何人都可以使用這個框架來進行并行編程?;贖adoop的編程非常簡單,對于沒有任何并行開發(fā)經(jīng)驗的開發(fā)人員,也可以輕松地開發(fā)出分布式的并行程序,并讓程序同時運行在數(shù)百臺機器上,在短時間內(nèi)完成海量數(shù)據(jù)的計算。大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce隨著“云計算”的普及,擁有數(shù)百臺機器的海量計算能力運行并行程序并非難事,如Amazon公司的云計算平臺AmazonEC2、華為的云計算平臺FusionCompute都已經(jīng)提供了按需計算的租用服務(wù)。大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce概念MapReduceMapReduce主要是指基于Google的MapReduce論文開發(fā)的HadoopMapReduce,是一個高性能的分布式批處理計算框架,用于對海量數(shù)據(jù)進行并行分析和處理。與傳統(tǒng)數(shù)據(jù)倉庫和分析技術(shù)相比,MapReduce適合處理各種類型的數(shù)據(jù),包括結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化,廣泛應(yīng)用于日志分析、海量數(shù)據(jù)排序、在海量數(shù)據(jù)中查找特定模式等場景中。HDFS在MapReduce任務(wù)處理過程中提供了對文件操作和存儲的支持,MapReduce在HDFS的基礎(chǔ)上實現(xiàn)任務(wù)的分發(fā)、跟蹤、執(zhí)行、計算等工作,并收集結(jié)果。大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce基本模型MapReduce基本模型在Hadoop中,每個MapReduce任務(wù)都會被初始化為一個作業(yè)(Job)。每個Job又可以分為Map階段和Reduce階段。Map階段和Reduce階段分別有兩個函數(shù),即map()函數(shù)和reduce()函數(shù),業(yè)務(wù)邏輯的實現(xiàn)者需要提供這兩個函數(shù)的具體編程實現(xiàn)。map()函數(shù)接收一個<key,value>形式的輸入,然后產(chǎn)生同樣的<key,value>形式的中間輸出,Hadoop會負責將所有具有相同中間key值的value集合到一起傳遞給reduce()函數(shù)。reduce()函數(shù)接收一個如<key,(listofvalues)>形式的輸入,然后對這個value集合進行處理,reduce()的輸出也是<key,vakue>形式的。MapReduce的工作流程圖大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce工作流程大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce工作流程任務(wù)粒度(Split)將原始的大數(shù)據(jù)集切分為小數(shù)據(jù)集(大小小于或等于HDFS中的一個Block大?。?,使一個小數(shù)據(jù)集位于一臺計算機上,方便本地計算。假設(shè)有M個數(shù)據(jù)集待處理,就啟動M個Map任務(wù),分布于N臺計算機并行計算,Reduce的任務(wù)數(shù)量R由用戶決定。數(shù)據(jù)分割(Partition)MapReduce提供Partition接口。作用:把Map任務(wù)輸出的中間過程按key的范圍劃分為R份(定義的Reduce任務(wù)個數(shù)),劃分時采用Hash函數(shù),從而保證某一段范圍的key交由一個Reduce任務(wù)處理,平均了Reduce的處理能力,可簡化Reduce過程。大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce工作流程排序(Sort)Map輸出的中間結(jié)果在Reduce接收之前,需要將數(shù)據(jù)寫入內(nèi)存緩沖區(qū)中,緩存區(qū)的作用是批量收集Map輸出結(jié)果,減少磁盤IO的影響。這個內(nèi)存緩沖區(qū)有大小限制,當Map任務(wù)的輸出結(jié)果超過內(nèi)存可接受的數(shù)據(jù)量時,就會從內(nèi)存溢寫(Spill)到磁盤,以便重新利用緩存區(qū)。溢寫操作是由單獨線程來完成,不影響往緩存區(qū)寫入輸出結(jié)果的線程。當溢寫線程啟動后,會對需要寫入磁盤的數(shù)據(jù)按key進行排序。大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce工作流程數(shù)據(jù)合并(Combine)溢寫操作中還有一個重要的Combine過程,將寫入磁盤的數(shù)據(jù)按照相同的key進行合并,減少溢寫到磁盤的數(shù)據(jù)量,從而降低網(wǎng)絡(luò)流量。但不是所有MapReduce任務(wù)都可添加Combine,因為Combine不能改變最終的計算結(jié)果,所以Combine只應(yīng)用于Reduce的輸入與輸出的鍵值對類型完全一致,且不影響最終結(jié)果的場合,如累加、計算最值等任務(wù)。大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce工作流程數(shù)據(jù)拉?。–opy)Reduce端將Map的執(zhí)行中間結(jié)果完整的拉取,這個階段被稱為Copy。數(shù)據(jù)融合(Merge)Merge顧名思義就是將從不同Map拉取過來的數(shù)據(jù)不斷地進行融合,形成最終的ReduceTask,交由Reduce處理。規(guī)約(Reduce)規(guī)約是對每個文件的內(nèi)容做最后一次統(tǒng)計,執(zhí)行reduce()函數(shù),如累加、求最值等,同時將結(jié)果存入輸出文件中。大數(shù)據(jù)基礎(chǔ)組件介紹——MapReduce特點MapReduce的特點易于編程在MapReduce中,程序員僅需描述做什么,具體怎么做交由系統(tǒng)的執(zhí)行框架處理。良好的擴展性MapReduce可通過添加節(jié)點以擴展集群能力。高容錯性MapReduce通過計算遷移或數(shù)據(jù)遷移等策略提高集群的可用性和容錯性。PB級以上海量數(shù)據(jù)的離線處理MapReduce可以處理大規(guī)模海量數(shù)據(jù),應(yīng)用程序可以通過MapReduce在多個集群節(jié)點上并行運行。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark概念與發(fā)展歷程Spark概念SparkSpark在2009年誕生于美國加州大學伯克利分校的AMP實驗室,是基于內(nèi)存計算的大數(shù)據(jù)并行計算框架,可用于構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。Spark最初的設(shè)計目標是使數(shù)據(jù)分析更快,不僅運行速度快,也要能快速、容易地編寫程序。Spark為了使程序運行更快,提供了內(nèi)存計算和基于DAG的任務(wù)調(diào)度執(zhí)行機制,減少了迭代計算時的I/O開銷。Spark使用簡練、優(yōu)雅的Scala語言編寫,以及基于Scala提供了交互式的編程體驗。同時,Spark支持Scala、Java、Python、R等多種編程語言。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark概念與發(fā)展歷程Spark加入Apache后,發(fā)展速度非???,增加了很多新功能。Spark發(fā)展歷程時間說明2009年Spark誕生于伯克利大學AMP實驗室,屬于伯克利大學的研究性項目2010年Spark通過BSD許可協(xié)議正式對外開源發(fā)布2012年Spark第一篇論文發(fā)布,第一個正式版(Spark0.6.0)發(fā)布2013年Spark成為了Apache基金項目,發(fā)布了SparkStreaming、SparkMLlib(機器學習)、Shark(SparkonHadoop)2014年Spark成為Apache的頂級項目,5月底Spark1.0.0發(fā)布,還發(fā)布了SparkGraphx(圖計算)、SparkSQL代替Shark2015年Spark推出DataFrame(大數(shù)據(jù)分析)。2015年至今,Spark在國內(nèi)IT行業(yè)變得愈發(fā)火爆,大量的公司開始重點部署或者使用Spark來替代MapReduce、Hive、Storm等傳統(tǒng)的大數(shù)據(jù)計算框架2016年Spark推出Dataset(更強的數(shù)據(jù)分析手段)2017年StructuredStreaming發(fā)布2018年Spark2.4.0發(fā)布,成為全球最大的開源項目2019年持續(xù)更新版本大數(shù)據(jù)基礎(chǔ)組件介紹——Spark特點Spark特點快速易用通用隨處運行代碼簡潔大數(shù)據(jù)基礎(chǔ)組件介紹——Spark特點快速分別使用Hadoop和Spark運行邏輯回歸算法示例的運行時間比較如下圖從圖中可以看出,Spark運行邏輯回歸算法的速度是Hadoop運行速度的100多倍。一般情況下,對于迭代次數(shù)較多的應(yīng)用程序,Spark程序在內(nèi)存中的運行速度是Hadoop運行速度的100多倍,在磁盤上的運行速度是Hadoop運行速度的10多倍。

大數(shù)據(jù)基礎(chǔ)組件介紹——Spark特點快速Spark與Hadoop數(shù)據(jù)存儲對比如下圖Spark與Hadoop的運行速度的差異主要是因為Spark的中間數(shù)據(jù)存放于內(nèi)存中,有更高的迭代運算效率,而Hadoop每次迭代的中間數(shù)據(jù)存放于HDFS中,涉及硬盤的讀寫,明顯降低了運算效率。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark特點易用Spark支持使用Scala、Python、Java和R語言快速編寫應(yīng)用。同時Spark提供超過80個高級運算符,使編寫并行應(yīng)用程序更加容易,并且可以在Scala、Python或R的交互模式下使用Spark。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark特點通用Spark可以與SQL、Streaming及復雜的分析良好結(jié)合。Spark有一系列的高級組件,包括SparkSQL、MLlib(機器學習庫)、GraphX(圖計算)和SparkStreaming,并且支持在一個應(yīng)用中同時使用這些組件。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark特點隨處運行用戶可以使用Spark的獨立集群模式運行Spark,也可以在EC2(亞馬遜彈性計算云)、HadoopYARN或者ApacheMesos上運行Spark,并且可以從HDFS、Cassandra、HBase、Hive、Tachyon和任何分布式文件系統(tǒng)中讀取數(shù)據(jù)。代碼簡潔Spark支持使用Scala、Python等語言編寫。由于Scala或Python的代碼相對Java來說更簡潔,所有Spark使用Scala或Python編寫應(yīng)用程序要比使用MapReduce編寫應(yīng)用程序簡單方便。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark應(yīng)用場景Spark使用了內(nèi)存分布式數(shù)據(jù)集技術(shù),除了能夠提供交互式查詢外,還提升了迭代工作負載的性能。在互聯(lián)網(wǎng)領(lǐng)域,Spark有快速查詢、實時日志采集處理、業(yè)務(wù)推薦、定制廣告、用戶圖計算等強大功能?!獙嶋H業(yè)務(wù)運行在Spark平臺上的國內(nèi)外大公司—……大數(shù)據(jù)基礎(chǔ)組件介紹——Spark應(yīng)用場景目前,Spark應(yīng)用領(lǐng)域主要在以下幾個方面Spark應(yīng)用場景快速查詢系統(tǒng)實時日志采集處理系統(tǒng)業(yè)務(wù)推薦系統(tǒng)定制廣告系統(tǒng)用戶圖計算數(shù)據(jù)挖掘大數(shù)據(jù)基礎(chǔ)組件介紹——Spark應(yīng)用場景快速查詢系統(tǒng)基于日志數(shù)據(jù)的快速查詢系統(tǒng)業(yè)務(wù)構(gòu)建于Spark之上,利用其快速查詢、內(nèi)存表、支持SQL查詢、支持多種外部數(shù)據(jù)源等優(yōu)勢,Spark能夠承擔大多數(shù)日志數(shù)據(jù)的即時查詢工作,并在性能方面普遍比Hive快。實時日志采集處理系統(tǒng)Spark流處理模塊能對業(yè)務(wù)日志進行實時快速迭代處理,并進行綜合分析,用于滿足線上系統(tǒng)分析要求。此外,流處理的速度能夠支持秒級延遲。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark應(yīng)用場景業(yè)務(wù)推薦系統(tǒng)Spark將業(yè)務(wù)推薦系統(tǒng)的小時和天級別的模型訓練,轉(zhuǎn)變?yōu)榉昼娂墑e的模型訓練,能有效地優(yōu)化相關(guān)排名、個性化推薦和熱點分析等。定制廣告系統(tǒng)定制廣告業(yè)務(wù)需要大數(shù)據(jù)在應(yīng)用分析、效果分析、定向優(yōu)化等方面的支持,借助Spark快速迭代的優(yōu)勢,可以實現(xiàn)“數(shù)據(jù)實時采集、算法實時訓練、系統(tǒng)實時預測”的全流程實時,并且并行地運行高維算法,可以支持上億的請求量處理。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark應(yīng)用場景用戶圖計算利用Spark圖計算解決了許多生產(chǎn)問題,如基于分布的中樞節(jié)點發(fā)現(xiàn)、基于最大連通圖的社區(qū)發(fā)現(xiàn)、基于三角形計數(shù)的關(guān)系衡量、基于隨機游走的用戶屬性傳播等。數(shù)據(jù)挖掘在海量數(shù)據(jù)基礎(chǔ)上,利用Spark支持的多種數(shù)據(jù)挖掘和機器學習方法,可以對數(shù)據(jù)進行挖掘分析,解決推薦、分類等任務(wù)。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark與MapReduce比較Hadoop雖已成為大數(shù)據(jù)技術(shù)的事實標準,但其本身還存在諸多缺陷。其中,最主要的缺陷是MapReduce計算模型延遲過高,無法勝任實時、快速計算的需求,因而只適用于離線批處理的應(yīng)用場景。Hadoop中的MapReduce計算框架主要存在以下缺點。表達能力有限計算都必須轉(zhuǎn)化成Map和Reduce兩個操作,但這并不適合所有的情況,難以描述復雜的數(shù)據(jù)處理過程。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark與MapReduce比較磁盤I/O開銷大每次執(zhí)行時都需要從磁盤讀取數(shù)據(jù),并且在計算完成后需要將中間結(jié)果寫入到磁盤中,I/O開銷較大。延遲高一次計算可能需要分解成一系列按順序執(zhí)行的MapReduce任務(wù),任務(wù)之間的銜接由于涉及I/O開銷,會產(chǎn)生較高延遲。而且,在前一個任務(wù)執(zhí)行完成之前,其他任務(wù)無法開始,因此難以勝任復雜、多階段的計算任務(wù)。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark與MapReduce比較Spark在借鑒MapReduce優(yōu)點的同時,很好地解決了MapReduce所面臨的問題。相比于MapReduce,Spark主要具有的優(yōu)點編程模型靈活計算速度快Spark的計算模式也屬于MapReduce,但不局限于Map和Reduce操作,還提供了多種數(shù)據(jù)集操作類型,編程模型比MapReduce更靈活。Spark提供了內(nèi)存計算,中間結(jié)果直接放到內(nèi)存中,帶來了更高的迭代運算效率。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark與MapReduce比較應(yīng)用靈活,易于編程實時處理性能優(yōu)越,延遲低在實際進行開發(fā)時,使用Hadoop需要編寫不少相對底層的代碼,不夠高效。相對而言,Spark提供了多種高層次、簡潔的API,通常情況下,對于實現(xiàn)相同功能的應(yīng)用程序,Spark的代碼量要比Hadoop少很多。Spark支持多種語言,支持SQL查詢、流式計算、機器學習等,滿足更多應(yīng)用場景。MapReduce更加適合處理離線數(shù)據(jù),而Spark通過SparkStreaming支持對流式數(shù)據(jù)進行實時處理,延遲低且無需額外的配置。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark生態(tài)圈Spark的設(shè)計遵循“一個軟件棧滿足不同應(yīng)用場景”的理念,逐漸形成了一套完整的生態(tài)系統(tǒng)。Spark生態(tài)系統(tǒng)如下圖大數(shù)據(jù)基礎(chǔ)組件介紹——Spark生態(tài)圈Spark生態(tài)系統(tǒng)Spark既能夠提供內(nèi)存計算框架,也可以支持SQL查詢(SparkSQL)、流式計算(SparkStreaming)、機器學習(MLlib)和圖計算(GraphX)等。Spark可以部署在資源管理器YARN之上,提供一站式的大數(shù)據(jù)解決方案。因此,Spark所提供的生態(tài)系統(tǒng)同時支持批處理、交互式查詢和流數(shù)據(jù)處理。SparkCore提供Spark最基礎(chǔ)與最核心的功能它的子框架包括SparkSQL、SparkStreaming、SparkMLlib和SparkGraphX。SparkStreamingSparkAPI核心的一個存在SparkStreaming可達到超高通量的擴展,可以處理實時數(shù)據(jù)流的數(shù)據(jù)并進行容錯。SparkStreaming可以從Kafka、Flume、Twitter、ZeroMQ、Kinesis、TCPsockets等數(shù)據(jù)源中獲取數(shù)據(jù),并且可以使用復雜的算法和高級功能對數(shù)據(jù)進行處理,并將處理后的數(shù)據(jù)推送到文件系統(tǒng)或數(shù)據(jù)庫中。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark生態(tài)圈SparkSQL一種結(jié)構(gòu)化的數(shù)據(jù)處理模塊SparkSQL提供了一個稱為DataFrame的編程抽象,也可以作為分布式SQL查詢引擎。一個DataFrame類似一個關(guān)系型數(shù)據(jù)庫中的一個表,可以通過多種方式構(gòu)建,如結(jié)構(gòu)化數(shù)據(jù)文件、Hive、外部數(shù)據(jù)庫或分布式動態(tài)數(shù)據(jù)集(RDD)。大數(shù)據(jù)基礎(chǔ)組件介紹——Spark生態(tài)圈GraphXGraphX在Graphs和Graph-parallel并行計算中是一個新的部分,GraphX是Spark上的分布式圖形處理架構(gòu),可用于圖表計算。SparkMLlib算法包SparkMLlib是一個封裝了多種常用數(shù)據(jù)挖掘分析算法和機器學習算法的算法包。調(diào)用MLlib算法包可以非常快速地進行模型構(gòu)建,創(chuàng)建的模型采用分布式并行計算,運行效率更高。目前MLlib支持的主要的機器學習算法大數(shù)據(jù)基礎(chǔ)組件介紹——Spark生態(tài)圈大數(shù)據(jù)基礎(chǔ)組件介紹——Storm面對大數(shù)據(jù),特別是流數(shù)據(jù)的實時計算需求,傳統(tǒng)的數(shù)據(jù)庫技術(shù)方案已不能滿足需求,數(shù)據(jù)庫高成本的同時并不能帶來高效率,因此出現(xiàn)了針對流數(shù)據(jù)的實時計算——流計算。流計算即針對流數(shù)據(jù)的實時計算。流數(shù)據(jù),也稱流式數(shù)據(jù),是指將數(shù)據(jù)以數(shù)據(jù)流的形式來處理。數(shù)據(jù)流是在時間分布和數(shù)量上的一系列動態(tài)數(shù)據(jù)集合體,數(shù)據(jù)記錄是數(shù)據(jù)流的最小組成單元。數(shù)據(jù)流的特征有:數(shù)據(jù)連續(xù)不斷;數(shù)據(jù)來源眾多,格式復雜;數(shù)據(jù)量大,但是不十分關(guān)注存儲;注重數(shù)據(jù)的整體價值,不過分關(guān)注個別數(shù)據(jù);數(shù)據(jù)流順序顛倒,或者不完整。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm實時計算是針對大數(shù)據(jù)而言的。對于少量數(shù)據(jù)而言,實時計算并不存在問題,但隨著數(shù)據(jù)量的不斷膨脹,實時計算就發(fā)生了質(zhì)的改變,數(shù)據(jù)的結(jié)構(gòu)與來源越來越多樣化,實時計算的邏輯也變得越來越復雜。除了像非實時計算的需求(如計算結(jié)果準確)以外,實時計算最重要的一個需求是能夠?qū)崟r響應(yīng)計算結(jié)果,一般要求為秒級。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm概念與發(fā)展歷程Storm是一個分布式計算框架,主要使用Clojure與Java語言編寫。最初由NathanMarz帶領(lǐng)Backtype公司的團隊創(chuàng)建,在Backtype公司被Twitter公司收購后進行開源。最初的版本在2011年9月17日發(fā)行,版本號為0.5.0。2013年9月,Apache基金會開始接管并孵化Storm項目。ApacheStorm是在EclipsePublicLicense下進行開發(fā)的,并提供給大多數(shù)企業(yè)使用。在Apache孵化器項目中,Storm使用Git作為版本控制,使用AtlassianJIRA作為問題跟蹤。經(jīng)過了一年多時間,2014年9月,Storm項目成為Apache的頂級項目。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm概念與發(fā)展歷程StormStorm是一個免費開源的分布式實時計算系統(tǒng)。Storm能輕松可靠地處理無界的數(shù)據(jù)流,就如同Hadoop對數(shù)據(jù)進行批處理,并且Storm十分簡單,易于學習,開發(fā)人員可以使用任何編程語言對它進行操作,并得到滿意的結(jié)果。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm特點簡單的編程模型支持各種編程語言Storm為大數(shù)據(jù)的實時計算提供了簡單優(yōu)美的編程模型,大大降低了開發(fā)并行實時處理任務(wù)的復雜性,能夠更加快速、高效的開發(fā)應(yīng)用。Storm默認支持Clojure、Java、Ruby和Python。此外,若需要增加對其他語言的支持,則只需實現(xiàn)一個簡單的Storm通信協(xié)議即可。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm特點高容錯性支持水平擴展如果在消息處理過程中出現(xiàn)一些異常,那么Storm會重新部署這個出問題的處理單元。Storm保證一個處理單元永遠運行(除非顯式地結(jié)束這個處理單元)。如果處理單元存儲了中間狀態(tài),那么當處理單元重新被Storm啟動時,需要將自身處理的中間狀態(tài)恢復。在Storm中,計算是在多個線程、進程和服務(wù)器之間并行進行的,支持靈活的水平擴展。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm特點可靠的消息處理快速Storm保證每個消息至少能得到一次完整處理。Storm用ZeroMQ作為底層消息隊列,保證消息能快速被處理。支持本地模式Storm有一個“本地模式”,可以在處理過程中完全模擬Storm集群,方便用戶快速進行開發(fā)和單元測試。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm特點容易部署Storm集群易于部署,只需少量的安裝和配置就可以運行。Storm支持動態(tài)增加節(jié)點,新增節(jié)點自動注冊到集群中,但現(xiàn)有運行的任務(wù)不會自動均衡負載。圖形化監(jiān)控Storm提供圖形界面,可以監(jiān)控各個拓撲的信息,包括每個處理單元的狀態(tài)和處理消息的數(shù)量。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm應(yīng)用場景Storm能用于很多場景中流處理(典型用例)Storm可以用來處理源源不斷流進來的消息,并在處理之后將結(jié)果寫到某個存儲中。連續(xù)計算(典型用例)Storm能保證計算可以永遠運行,直到用戶結(jié)束計算進程為止。分布式RPC(典型用例)由于Storm的處理組件是分布式的,而且處理延遲極低,所以可以作為通用的分布式RPC架構(gòu)使用。當然,其實搜索引擎本身也是一個分布式RPC系統(tǒng)。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件Storm框架的核心/Storm的基本組成部分Stream(流)Spout(消息源)Bolt(邏輯處理單元)Topology(拓撲)Streamgrouping(流分組)Task(任務(wù))Worker(工作進程)Executor(執(zhí)行器)大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件Stream在Storm對流Stream的抽象描述中,流是一個不間斷的無界的連續(xù)Tuple(元組,是元素有序列表)。這些無界的元組會以分布式的方式并行地創(chuàng)建和處理。Tuple可以包含整形、長整形、短整形、字節(jié)、字符、雙精度數(shù)、浮點數(shù)、布爾值和字節(jié)數(shù)組。用戶可以通過定義序列化器,在本機Tuple使用自定義類型。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件SpoutStorm認為每個Stream都有一個源頭,它將這個源頭抽象為Spout。Spout會從外部讀取流數(shù)據(jù)并發(fā)出Tuple。Spout可以發(fā)出多個流。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件BoltStorm將流的中間狀態(tài)轉(zhuǎn)換抽象為Bolt。Bolt可以完成過濾、業(yè)務(wù)處理、連接運算、連接、訪問數(shù)據(jù)庫等業(yè)務(wù)。Bolt通過簡單的流的轉(zhuǎn)換,發(fā)出超過的一個流,并在Bolt中啟動新的線程做異步處理,如下圖。Bolt處理Tuples并產(chǎn)生新的數(shù)據(jù)流大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件Topology為了提高效率,Spout源可以接上多個Bolt處理器,組成無向環(huán)圖,如右圖。Storm無向環(huán)圖抽象為Topology。Topology是Storm中最高層次的抽象概念,可以被提交到Storm集群執(zhí)行,一個Topology就是一個流轉(zhuǎn)換圖。Topology的每個節(jié)點包含處理邏輯,節(jié)點之間的鏈接顯示數(shù)據(jù)應(yīng)該如何在節(jié)點之間傳遞。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件Streamgrouping流分組用于在Bolt的任務(wù)中定義流應(yīng)該如何分區(qū)。Storm有8個內(nèi)置的流分組接口隨機分組(Shufflegrouping)字段分組(Fieldsgrouping)部分關(guān)鍵字分組(Partialkeygrouping)全部分組(Allgrouping)全局分組(Globalgrouping)無分組(Nonegrouping)直接分組(Directgrouping)本地或者隨機分組(Localorshufflegrouping)大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件Task每個Spout或者Bolt在集群執(zhí)行許多任務(wù)。每個任務(wù)對應(yīng)一個線程的執(zhí)行,流分組定義如何從一個任務(wù)集到另一個任務(wù)集發(fā)送Tuple。用戶可通過TopologyBuilder類的setSpout()和setBolt()方法來設(shè)置每個Spout或者Bolt的并行度。WorkerTopology跨一個或多個Worker節(jié)點的進程執(zhí)行。每個Worker節(jié)點的進程是一個物理的JVM,執(zhí)行Topology所有任務(wù)中的一部分任務(wù)。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件ExecutorExecutor是一個由Worker節(jié)點的進程啟動的線程。在一個Worker節(jié)點的進程中,可能會有一個或多個Executor。一個Executor會為某一個component(Spout或者Bolt)運行一個或多個任務(wù),每一個線程只會為同一個component服務(wù)。大數(shù)據(jù)基礎(chǔ)組件介紹——Storm核心組件Storm集群包括兩類節(jié)點:主控節(jié)點(MasterNode)和工作節(jié)點(WorkerNode)。主控節(jié)點上運行一個被稱為Nimbus的后臺程序,負責在Storm集群內(nèi)分發(fā)代碼、分配任務(wù)到工作機器、監(jiān)控集群運行狀態(tài)。每個工作節(jié)點上運行一個被稱為Supervisor的后臺程序。Supervisor負責監(jiān)聽Nimbus分配給它執(zhí)行的任務(wù),據(jù)此啟動或停止執(zhí)行任務(wù)的工作進程(Worker)。每一個工作進程執(zhí)行一個Topology的子集,一個運行中的Topology由分布在不同工作節(jié)點上的多個工作進程組成。Nimbus和Supervisor之間的所有協(xié)調(diào)工作是通過Zookeeper集群實現(xiàn)的。大數(shù)據(jù)基礎(chǔ)組件介紹——Flink概念與發(fā)展歷程相對于傳統(tǒng)的數(shù)據(jù)處理模式,流式數(shù)據(jù)處理有著更高的處理效率和成本控制能力。ApacheFlink是近年來在開源社區(qū)不斷發(fā)展的技術(shù)中,能夠同時支持高吞吐、低延時、高性能的分布式處理框架。Flink誕生于歐洲的一個大數(shù)據(jù)研究項目StratoSphere。該項目是柏林工業(yè)大學的一個研究性項目。早期,F(xiàn)link用于Batch計算,但是在2014年,StratoSphere項目的核心成員孵化出Flink,同年將Flink捐贈Apache,并在后來Flink成為Apache的頂級大數(shù)據(jù)項目。Flink計算的主流方向被定位為Streaming,即用流式計算進行所有大數(shù)據(jù)的計算。2014年Flink作為主攻流計算的大數(shù)據(jù)引擎開始在開源大數(shù)據(jù)行業(yè)內(nèi)嶄露頭角。大數(shù)據(jù)基礎(chǔ)組件介紹——Flink概念與發(fā)展歷程區(qū)別于Storm、SparkStreaming以及其他流式計算引擎的是,F(xiàn)link不僅是一個高吞吐、低延遲的計算引擎,而且還提供很多高級的功能。如Flink提供了有狀態(tài)的計算,支持狀態(tài)管理、強一致性的數(shù)據(jù)語義,以及EventTime和WaterMar對消息亂序的處理。大數(shù)據(jù)基礎(chǔ)組件介紹——Flink特點Flink具有先進的架構(gòu)理念、諸多的優(yōu)秀特性和完善的編程接口,并在不斷地推出新的特性。Flink的具體優(yōu)勢同時支持高吞吐、低延遲、高性能Flink是目前開源社區(qū)中可以同時支持高吞吐、低延遲、高性能的分布式流式數(shù)據(jù)處理框架。大數(shù)據(jù)基礎(chǔ)組件介紹——Flink特點支持事件時間(EventTime)概念在流式計算領(lǐng)域中,窗口計算的地位舉足輕重,但目前大多數(shù)框架窗口計算采用的是事件傳輸?shù)接嬎憧蚣苓M行處理的系統(tǒng)主機時間。Flink能夠支持基于事件時間(EventTime)語義進行窗口計算,即使用事件產(chǎn)生的時間,這種基于事件驅(qū)動的機制使得事件即使亂序到達計算框架,也能保持事件原本產(chǎn)生時的時序性,從而計算出精確的結(jié)果。大數(shù)據(jù)基礎(chǔ)組件介紹——Flink特點支持有狀態(tài)計算Flink在1.4版本中實現(xiàn)了狀態(tài)管理。狀態(tài)是指在流式計算過程中將算子的中間結(jié)果數(shù)據(jù)保存在內(nèi)存或者文件系統(tǒng)中,等下一個事件進入算子后可以從之前的狀態(tài)獲取中間結(jié)果以計算當前的結(jié)果,從而無須每次都基于全部的原始數(shù)據(jù)來統(tǒng)計結(jié)果。這種方式極大地提升了系統(tǒng)的性能,并降低了數(shù)據(jù)計算過程的資源消耗。對于數(shù)據(jù)量大且運算邏輯非常復雜的流式計算場景,有狀態(tài)計算發(fā)揮了非常重要的作用。大數(shù)據(jù)基礎(chǔ)組件介紹——Flink特點支持高度靈活的窗口(Window)操作Flink將窗口劃分為基于Time、Count和Session,以及Data-driven等類型的窗口。窗口可以用靈活的觸發(fā)條件定制化來達到對復雜的流傳輸模式的支持。此外,用戶可以通過定義不同的窗口觸發(fā)機制來滿足不同的需求。大數(shù)據(jù)基礎(chǔ)組件介紹——Flink特點基于輕量級分布式快照(Snapshot)實現(xiàn)的容錯當Flink任務(wù)處理過程中發(fā)生錯誤時,會通過基于分布式快照技術(shù)的Checkpoints將執(zhí)行過程中的狀態(tài)信息進行持久化存儲,一旦任務(wù)出現(xiàn)異常停止,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論