1. 程式人生 > >Spark Streaming 圖片處理案例介紹

Spark Streaming 圖片處理案例介紹

前文回顧

前文《Spark Streaming 新手指南》介紹了 Spark Streaming 的基本工作原理,並以 WordCount 示例進行解釋。此外,針對 Spark Streaming 的優缺點也做了一些描述。

本文重點主要是解釋流式處理架構的工作原理,讓讀者對 Spark Streaming 的整體設計原理及應用場景有所瞭解。

流式處理框架特徵

流式處理框架的特徵主要有以下五個方面。

1. 強實時處理

流式處理需要確保資料的實時產生、實時計算,此外,也需要確保處理結果的實時傳送。大多數流式處理架構多采用記憶體計算方式,即當資料到達後直接在記憶體中計算,只有少量資料會被儲存到硬碟,或者乾脆不儲存資料。這樣的系統架構可以確保我們能夠提供低延遲計算能力,可以快速地進行資料計算,在資料較短的時間內完成計算,體現資料的有用性。對於時效性特別短、潛在價值又很大的資料可以優先計算。

2. 高容錯能力

由於資料很容易丟失,這就需要系統具有一定的容錯能力,要充分地利用好僅有的一次資料計算機會,儘可能全面、準確、有效地從資料流中得出有價值的資訊。

3. 動態變化

一般採用流式處理架構的應用場景都存在資料速率不固定的情況,即可能存在前一時刻資料速率和後一時刻資料速率有較大的差異。這樣的需求要求系統具有很好的可伸縮性,能夠動態適應流入的資料流,具有很強的系統計算能力和大資料流量動態匹配的能力。一方面,在高資料流速的情況下,保證不丟棄資料,或者識別並選擇性地丟棄部分不重要的資料;另一方面,在低資料速率的情況下,保證不會太久或過多地佔用系統資源。

4. 多資料來源

由於可能存在很多的資料來源,而且各資料來源、資料流之間又可能是相互獨立的,所以無法保證資料是有序的,這就需要系統在資料計算過程中具有很好的資料分析和發現規律的能力,不能過多地依賴資料流間的內在邏輯或者資料流內部的內在邏輯。

5. 高可擴充套件

由於資料是實時產生、動態增加的,即只要資料來源處於活動狀態,資料就會一直產生和持續增加下去。可以說,潛在的資料量是無限的,無法用一個具體確定的資料實現對其進行量化。系統在資料計算過程中,無法儲存全部資料。由於硬體中沒有足夠大的空間來儲存這些無限增長的資料,也沒有合適的軟體來有效地管理這麼多資料。

流式處理框架技術需求

針對具有強實時處理、高容錯能力、動態變化、多資料來源、高可擴充套件等特徵的流式處理框架需求,那麼理想的流式處理框架應該表現出低延遲、高吞吐、持續穩定執行和彈性可伸縮等特性,這需要系統設計架構、任務執行方式、高可用性技術等關鍵技術的合理規劃和良好設計。

  • 系統設計架構

系統架構是系統中各子系統間的組合方式,流式處理框架需要選擇特定的系統架構進行流式計算任務的部署。當前,針對流式處理框架較為流行的系統架構主要有無中心節點的 point-point 架構和有中心節點的 Master-Slaves 架構兩種。

(1) 對稱式架構。如圖 1 所示,系統中各個節點的作用是完全相同的,即所有節點之間互相可以做備份,這樣整個系統具有良好的可伸縮性。但是由於不存在中心節點,因此在資源排程、系統容錯、負載均衡等方面需要通過分散式協議幫助實現。目前商業產品 S4、Puma 屬於這類架構,S4 通過 Zookeeper 實現系統容錯、負載均衡等功能。

圖 1. 無中心節點架構

(2) 主從式系統架構。如圖 2 所示,系統存在一個主節點和多個從節點。主節點負責系統資源的管理和任務的協調,並完成系統容錯、負載均衡等方面的工作,從節點負責接收來自於主節點的任務,並在計算完成後進行反饋。各從節點間可以選擇是否資料往來,但是系統的整體執行狀態依賴主節點控制。Storm、Spark Streaming 屬於這種架構。

圖 2. 有中心節點架構

  • 任務執行方式

任務執行方式是指完成有向任務圖到物理計算節點的部署之後,各個計算節點之間的資料傳輸方式。資料的傳輸方式分為主動推送方式和被動拉取方式兩種。

(1) 主動推送方式。在上游節點產生或計算完資料後,主動將資料傳送到相應的下游節點,其本質是讓相關資料主動尋找下游的計算節點,當下遊節點報告發生故障或負載過重時,將後續資料流推送到其他相應節點。主動推送方式的優勢在於資料計算的主動性和及時性,但由於資料是主動推送到下游節點,往往不會過多地考慮到下游節點的負載狀態、工作狀態等因素,可能會導致下游部分節點負載不夠均衡;

(2) 被動拉取方式。只有下游節點顯式進行資料請求,上游節點才會將資料傳輸到下游節點,其本質是讓相關資料被動地傳輸到下游計算節點。被動拉取方式的優勢在於下游節點可以根據自身的負載狀態、工作狀態適時地進行資料請求,但上游節點的資料可能未必得到及時的計算。

大資料流式計算的實時性要求較高,資料需要得到及時處理,往往選擇主動推送的資料傳輸方式。當然,主動推送方式和被動拉取方式不是完全對立的,也可以將兩者進行融合,從而在一定程度上實現更好的效果。

  • 高可用性技術

流式計算框架的高可用性是通過狀態備份和故障恢復策略實現的。當故障發生後,系統根據預先定義的策略進行資料的重放和恢復。按照實現策略,可以被細分為被動等待 (passive standby)、主動等待 (active standby) 和上游備份 (upstream backup) 這 3 種策略。

(1) 被動等待策略

圖 3 所示,主節點 B 進行資料計算,副本節點 B’處於待命狀態,系統會定期地將主節點 B 上的最新的狀態備份到副本節點 B’上。出現故障時,系統從備份資料中進行狀態恢復。被動等待策略支援資料負載較高、吞吐量較大的場景,但故障恢復時間較長,可以通過對備份資料的分散式儲存縮短恢復時間。該方式更適合於精確式資料恢復,可以很好地支援不確定性應用計算,在當前流式資料計算中應用最為廣泛。

圖 3. 被動等待策略

(2) 主動等待策略

圖 4 所示,系統在為主節點 B 傳輸資料的同時,也為副本節點 B’傳輸一份資料副本。以主節點 B 為主進行資料計算,當主節點 B 出現故障時,副本節點 B’完全接管主節點 B 的工作,主副節點需要分配同樣的系統資源。該種方式故障恢復時間最短,但資料吞吐量較小,也浪費了較多的系統資源。在廣域網環境中,系統負載往往不是過大時,主動等待策略是一個比較好的選擇,可以在較短的時間內實現系統恢復。

圖 4. 主動等待策略

(3) 上游備份策略

每個主節點均記錄其自身的狀態和輸出資料到日誌檔案,當某個主節點 B 出現故障後,上游主節點會重放日誌檔案中的資料到相應副本節點 B’中進行資料的重新計算。上游備份策略所佔用的系統資源最小,在無故障期間,由於副本節點 B’保持空閒狀態,資料的執行效率很高。但由於其需要較長的時間進行恢復狀態的重構,故障的恢復時間往往較長,如需要恢復時間視窗為 30 分鐘的聚類計算,就需要重放該 30 分鐘內的所有元組。可見,於系統資源比較稀缺、運算元狀態較少的情況,上游備份策略是一個比較好的選擇方案。如圖 5 和圖 6 所示。

圖 5. 上游備份策略 1

圖 6. 上游備份策略 2

回頁首

Spark Streaming 所處地位

Spark Streaming 是 Spark 的擴充套件,專門用來實現流式分析方式處理資料。Spark Streaming 支援 Kafka、Flume、Twitter、ZeroMQ、Kinesis、TCP Sockets 等多種資料來源。此外,也可以使用一個複雜的演算法,如 map、reduce、join、window,這些來處理資料。處理完的資料可以被髮送給檔案系統、資料庫、其他第三方。圖 7 引用自 Spark Streaming 官網,比較好地描述了 Spark Streaming 的地位。

圖 7. Spark Streaming 地位

Spark Streaming 接收輸出資料流,然後將這些資料分割後放入批處理流程 (batches),Spark 引擎稍後會處理這些資料,最終生成計算結果併發送到外部系統。

筆者的前一篇文章已經詳細地通過 WordCount 示例介紹了 Spark Streaming 的執行次序、基本架構、RDD 概念,請讀者參閱文章《Spark Streaming 新手指南》。

Spark Streaming 應用例項

我們以一個流式處理圖片的例子作為本文的例項。我們把圖片檔案通過基於 Spark Streaming 的程式讀取成資料流,重新將資料流寫成圖片檔案並存儲在檔案系統上。

整個程式的流程圖如圖 8 所示。

圖 8. 圖片處理程式流程圖

如圖 8 所示,第一步我們需要實現一個服務,該服務不停地向 HDFS 檔案系統裡寫入圖片檔案,這些圖片檔案後續會被用來當作資料來源的原始資料,並被進行處理。程式碼如清單 1 所示。

清單 1. 迴圈寫入圖片檔案程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

相關推薦

Spark Streaming 圖片處理案例介紹

前文回顧 前文《Spark Streaming 新手指南》介紹了 Spark Streaming 的基本工作原理,並以 WordCount 示例進行解釋。此外,針對 Spark Streaming 的優缺點也做了一些描述。 本文重點主要是解釋流式處理架構的

發表在IBM Developworks上的文章,Spark Streaming 圖片處理案例介紹

插播小廣告,本人的《大話Java效能優化》一書已經在亞馬遜、京東、噹噹、天貓出售,提前謝謝大家支援。 原文地址:http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-streaming-picture/

Spark Streaming實時處理應用

1 框架一覽   事件處理的架構圖如下所示。 2 優化總結   當我們第一次部署整個方案時,kafka和flume元件都執行得非常好,但是spark streaming應用需要花費4-8分鐘來處理單個batch。這個延遲的原因有兩點,一是我們使用DataFrame來強化資料,而強化資料需要從h

spark streaming的入門案例

1, spark streaming: tcp 源 maven依賴: <dependency> <groupId>org.apache.spark</groupId> <artifactId>spa

Spark 定製版:004~Spark Streaming事務處理徹底掌握

本講內容: a. Exactly Once b. 輸出不重複 注:本講內容基於Spark 1.6.1版本(在2016年5月來說是Spark最新版本)講解。 上節回顧: 上節課通過案例透視了Spark Streaming Job架構和執行機,並結合原

Spark版本定製4-Spark Streaming事務處理徹底理解

本講內容: a. Exactly Once  b. 輸出不重複 注:本講內容基於Spark 1.6.1版本(在2016年5月來說是Spark最新版本)講解。 上節回顧: 上節課通過案例透視了Spark Streaming Job架構和執行機,並結合原始碼進行了詳細

spark streaming 同時處理兩個不同kafka叢集的資料

如題,總是不那麼完美,要處理的資料在兩個不同的kafka叢集裡面,日子得過,問題也得解決,我們建立兩個DStream,連線兩個不同的kafka叢集的不同topic,然後再把這兩個DStream union在一起處理,程式碼如下: package com.king

Spark Streaming實時流處理筆記(2)—— 實時處理介紹

1 實時和離線計算對比 1.1 資料來源 離線:HDFS 歷史資料,資料量較大 實時:訊息佇列(Kafka) 1.2 處理過程 離線:Mapreduce 實時:Spark(DStream/SS) 1.3 處理速度 離

Spark Streaming介紹以及案例

概觀 Spark Streaming是核心Spark API的擴充套件,可實現實時資料流的可擴充套件,高吞吐量,容錯流處理。 資料來源:Kafka,Flume,Kinesis或TCP套接字等, 可以使用高階函式進行復雜演算法進行處理map,例如reduce,join和window。

Spark流式處理框架案例網站流量分析&大資料生態圈介紹

一, 大資料框架(處理海量/流式資料) 1. 以HADOOP 2.x為體系的大資料生態系統處理框架 MapReduce:中間結果儲存在磁碟。Shuffle過程:map將資料寫入到本地磁碟,reduce通過網路的方式到各個map task所執行的機器中拷貝自己要處理的資料。

處理大數據流常用的三種Apache框架:Storm、Spark和Samza。(主要介紹Storm)

領導 hdf 客戶端 orm 至少 per yar 持續性 apache 處理實時的大數據流最常用的就是分布式計算系統,下面分別介紹Apache中處理大數據流的三大框架: Apache Storm 這是一個分布式實時大數據處理系統。Storm設計用於在容錯和

通過Spark Streaming處理交易數據

amp 引入 解決方案 框架 ins 容錯 ams 輕量 rdm Apache Spark 是加州大學伯克利分校的 AMPLabs 開發的開源分布式輕量級通用計算框架。 由於 Spark 基於內存設計,使得它擁有比 Hadoop 更高的性能(極端情況下可以達到 100x),

PK2227-Spark Streaming實時流處理項目實戰

con ans filesize strip for 新年 感覺 post pre PK2227-Spark Streaming實時流處理項目實戰 新年伊始,學習要趁早,點滴記錄,學習就是進步! 隨筆背景:在很多時候,很多入門不久的朋友都會問我:我是從其他語言轉到程序

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記三之銘文升級版

聚集 配置文件 ssi path fig rect 擴展 str 控制臺 銘文一級: Flume概述Flume is a distributed, reliable, and available service for efficiently collecting(收集),

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記五之銘文升級版

環境變量 local server 節點數 replicas conn 配置環境 park 所有 銘文一級: 單節點單broker的部署及使用 $KAFKA_HOME/config/server.propertiesbroker.id=0listenershost.name

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記九之銘文升級版

file sin ssi 右上角 result map tap 核心 內容 銘文一級: 核心概念:StreamingContext def this(sparkContext: SparkContext, batchDuration: Duration) = { th

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記十之銘文升級版

state 分鐘 mooc 系統數據 使用 連接 var style stream 銘文一級: 第八章:Spark Streaming進階與案例實戰 updateStateByKey算子需求:統計到目前為止累積出現的單詞的個數(需要保持住以前的狀態) java.lang.I

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記十五之銘文升級版

spa for 序列 html art mat div pre paths 銘文一級:[木有筆記] 銘文二級: 第12章 Spark Streaming項目實戰 行為日誌分析: 1.訪問量的統計 2.網站黏性 3.推薦 Python實時產生數據 訪問URL->IP

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記十六之銘文升級版

.so zook orm 3.1 date nta highlight org 結果 銘文一級: linux crontab 網站:http://tool.lu/crontab 每一分鐘執行一次的crontab表達式: */1 * * * * crontab -e */1

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記十七之銘文升級版

eid 實時 root 現在 ava == oop urn 啟動 銘文一級: 功能1:今天到現在為止 實戰課程 的訪問量 yyyyMMdd courseid 使用數據庫來進行存儲我們的統計結果 Spark Streaming把統計結果寫入到數據庫裏面 可視化前端根據:yyy