流(Streaming),在大數據時代爲數據流處理,就像水流同樣,是數據流;既然是數據流處理,就會想到數據的流入、數據的加工、數據的流出。算法
平常工做、生活中數據來源不少不一樣的地方。例如:工業時代的汽車製造、監控設備、工業設備會產生不少源數據;信息時代的電商網站、日誌服務器、社交網絡、金融交易系統、黑客攻擊、垃圾郵件、交通監控等;通訊時代的手機、平板、智能設備、物聯網等會產生不少實時數據,數據流無處不在。安全
在大數據時代Spark Streaming能作什麼?服務器
平時用戶都有網上購物的經歷,用戶在網站上進行的各類操做經過Spark Streaming流處理技術能夠被監控,用戶的購買愛好、關注度、交易等能夠進行行爲分析。在金融領域,經過Spark Streaming流處理技術能夠對交易量很大的帳號進行監控,防止罪犯洗錢、財產轉移、防欺詐等。在網絡安全性方面,黑客攻擊時有發生,經過Spark Streaming流處理技術能夠將某類可疑IP進行監控並結合機器學習訓練模型匹配出當前請求是否屬於黑客攻擊。其餘方面,如:垃圾郵件監控過濾、交通監控、網絡監控、工業設備監控的背後都是Spark Streaming發揮強大流處理的地方。微信
大數據時代,數據價值通常怎麼定義?網絡
全部沒通過流處理的數據都是無效數據或沒有價值的數據;數據產生以後當即處理產生的價值是最大的,數據放置越久或越滯後其使用價值越低。之前絕大多數電商網站盈利走的是網絡流量(即用戶的訪問量),現在,電商網站不只僅須要關注流量、交易量,更重要的是要經過數據流技術讓電商網站的各類數據流動起來,經過實時流動的數據及時分析、挖掘出各類有價值的數據;好比:對不一樣交易量的用戶指定用戶畫像,從而提供不一樣服務質量;準對用戶訪問電商網站板塊愛好及時推薦相關的信息。框架
SparkStreaming VS Hadoop MR:機器學習
Spark Streaming是一個準實時流處理框架,而Hadoop MR是一個離線、批處理框架;很顯然,在數據的價值性角度,Spark Streaming完勝於Hadoop MR。分佈式
SparkStreaming VS Storm:oop
Spark Streaming是一個準實時流處理框架,處理響應時間通常以分鐘爲單位,也就是說處理實時數據的延遲時間是秒級別的;Storm是一個實時流處理框架,處理響應是毫秒級的。因此在流框架選型方面要看具體業務場景。須要澄清的是如今不少人認爲Spark Streaming流處理運行不穩定、數據丟失、事務性支持很差等等,那是由於不少人不會駕馭Spark Streaming及Spark自己。在Spark Streaming流處理的延遲時間方面,DT_Spark大數據夢工廠即將推出的Spark定製版本,會將Spark Streaming的延遲從秒級別推動到100毫秒以內甚至更少。學習
SparkStreaming優勢:
一、提供了豐富的API,企業中能快速實現各類複雜的業務邏輯。
二、流入Spark Streaming的數據流經過和機器學習算法結合,完成機器模擬和圖計算。
三、Spark Streaming基於Spark優秀的血統。
SparkStreaming能不能像Storm同樣,一條一條處理數據?
Storm處理數據的方式是以條爲單位來一條一條處理的,而Spark Streaming基於單位時間處理數據的,SparkStreaming能不能像Storm同樣呢?答案是:能夠的。
業界通常的作法是Spark Streaming和Kafka搭檔便可達到這種效果,入下圖:
Kafka業界認同最主流的分佈式消息框架,此框架即符合消息廣播模式又符合消息隊列模式。
Kafka內部使用的技術:
一、 Cache
二、 Interface
三、 Persistence(默認最大持久化一週)
四、 Zero-Copy技術讓Kafka每秒吞吐量幾百兆,並且數據只須要加載一次到內核提供其餘應用程序使用
外部各類源數據推動(Push)Kafka,而後再經過Spark Streaming抓取(Pull)數據,抓取的數據量能夠根據本身的實際狀況肯定每一秒中要處理多少數據。
經過Spark Streaming動手實戰wordCount實例
這裏是運行一個Spark Streaming的程序:統計這個時間段內流進來的單詞出現的次數. 它計算的是:他規定的時間段內每一個單詞出現了多少次。
一、先啓動下Spark集羣:
咱們從集羣裏面打開下官方網站
接受這個數據進行加工,就是流處理的過程,剛纔那個WordCount就是以1s作一個單位。
剛纔運行的時候,爲何沒有結果呢?由於須要數據源。
二、獲取數據源:
新開一個命令終端,而後輸入:
$ nc -lk 9999
如今咱們拷貝數據源進入運行:
而後按回車運行
DStream和RDD關係:
沒有輸入數據會打印的是空結果:
可是實際上,Job的執行是Spark Streaming框架幫咱們產生的和開發者本身寫的Spark代碼業務邏輯沒有關係,並且Spark Streaming框架的執行時間間隔能夠手動配置,如:每隔一秒鐘就會產生一次Job的調用。因此在開發者編寫好的Spark代碼時(如:flatmap、map、collect),不會致使job的運行,job運行是Spark Streaming框架產生的,能夠配置成每隔一秒中都會產生一次job調用。
Spark Streaming流進來的數據是DStream,但Spark Core框架只認RDD,這就產生矛盾了?
Spark Streaming框架中,做業實例的產生都是基於rdd實例來產生,你寫的代碼是做業的模板,即rdd是做業的模板,模板一運行rdd就會被執行,此時action必須處理數據。RDD的模板就是DStream離散流,RDD之間存在依賴關係,DStream就有了依賴關係,也就構成了DStream 有向無環圖。這個DAG圖,是模板。Spark Streaming只不過是在附在RDD上面一層薄薄的封裝而已。你寫的代碼不能產生Job,只有框架才能產生Job.
若是一秒內計算不完數據,就只能調優了.
總結:
備註:82課
更多私密內容,請關注微信公衆號:DT_Spark