1. 程式人生 > >Spark+Spark streaming+kafka簡介和總結

Spark+Spark streaming+kafka簡介和總結

接上文《Hadoop生態系統》,對Spark、Spark streaming、kafka的相關內容進行總結。

1、Hadoop和Spark的關係

Spark是為了跟Hadoop配合而開發出來的,不是為了取代Hadoop,專門用於大資料量下的迭代式計算。

Spark運算比Hadoop的MapReduce框架快的原因是因為Hadoop在一次MapReduce運算之後,會將資料的運算結果從記憶體寫入到磁碟中,第二次MapReduce運算時再從磁碟中讀取資料,所以其瓶頸在2次運算間的多餘I/O消耗。Spark則是將資料一直快取在記憶體中,直到計算得到最後的結果,再將結果寫入到磁碟,所以多次運算的情況下,Spark是比較快的。

2、Spark生態系統


Spark SQL:提供類SQL的查詢,返回Spark-DataFrame的資料結構;

Spark Streaming:流式計算,主要用於處理實時資料;

MLlib:提供機器學習的各種模型和調優;

GraphX:提供基於圖的演算法,如PageRank

3、什麼是RDD

RDD俗稱彈性分散式資料集,是Spark底層的分散式儲存的資料結構,是Spark的核心。

在Spark 的設計思想中,為了減少網路及磁碟 IO 開銷,需要設計出一種新的容錯方式,於是才誕生了新的資料結構 RDD。RDD 是一種只讀的資料塊,可以從外部資料轉換而來,你可以對RDD進行函式操作(Operation),包括 Transformation 和 Action。在這裡只讀表示當你對一個RDD進行了操作,那麼結果將會是一個新的 RDD,這種情況放在程式碼裡,假設變換前後都是使用同一個變量表示這一 RDD,RDD 裡面的資料並不是真實的資料,而是一些元資料資訊,記錄了該 RDD 是通過哪些Transformation得到的,在計算機中使用lineage來表示這種血緣結構,lineage形成一個有向無環圖 DAG,整個計算過程中,將不需要將中間結果落地到HDFS進行容錯,加入某個節點出錯,則只需要通過lineage關係重新計算即可。

RDD的操作函式(operation)主要分為2種類型 Transformation 和 Action。

類別 函式 區別
Transformation Map,filter,groupBy,join, union,reduce,sort,partitionBy 返回值還是 RDD,不會馬上提交 Spark 叢集執行
Action count,collect,take,save, show 返回值不是 RDD,會形成 DAG 圖,提交 Spark 叢集執行並立即返回結果

Transformation操作不是馬上提交Spark 叢集執行,Spark在遇到Transformation操作時只會記錄需要這樣的操作,並不會去執行,需要等到有Action操作的時候才會真正啟動計算過程進行計算。針對每個Action,Spark會生成一個 Job,從資料的建立開始,經過Transformation,結尾是Action操作。這些操作對應形成一個有向無環圖(DAG),形成DAG的先決條件是最後的函式操作是一個Action。

4、Spark Streaming

Spark Streaming是一種構建在Spark上的實時計算框架,它擴充套件了Spark處理大規模流式資料的能力。

首先,Spark Streaming把實時輸入資料流以時間片Δt (如1秒)為單位切分成塊,Spark Streaming會把每塊資料作為一個RDD,並使用RDD操作處理每一小塊資料,每個塊都會生成一個Spark Job處理,最終結果也返回多塊。 在Spark Streaming中,則通過操作DStream(表示資料流的RDD序列)提供的介面,這些介面和RDD提供的介面類似。 

正如Spark Streaming最初的目標一樣,它通過豐富的API和基於記憶體的高速計算引擎讓使用者可以結合流式處理,批處理和互動查詢等應用。因此Spark Streaming適合一些需要歷史資料和實時資料結合分析的應用場合。當然,對於實時性要求不是特別高的應用也能完全勝任,另外通過RDD的資料重用機制可以得到更高效的容錯處理。

5、kafka

是一種高吞吐量的分散式、釋出/訂閱訊息系統,可以同時支援離線資料處理和實時資料處理。

相當於一個數據管道,一方面對接生產者(生產系統),另一方面對接多個訂閱者(分析系統);定時從生產系統獲取資料,形成日誌收集中心,通過增加訂閱者介面,分析系統可以自定義資料提取規則,離線資料可以T+1批量傳送,而實時資料可以按分鐘級/秒級的頻率獲取資料。

參考文章:

Spark學習-Spark原理簡述與shuffle過程介紹:http://blog.csdn.net/databatman/article/details/53023818?locationNum=4&fps=1

Spark簡介:http://blog.csdn.net/qustqustjay/article/details/46874071

flume+kafka+spark streaming(持續更新):http://blog.csdn.net/xuyaoqiaoyaoge/article/details/55823381?locationNum=2&fps=1