Spark 基本介紹
Apache Spark 的介紹
Last updated
Apache Spark 的介紹
Last updated
在這篇介紹中,我將著重在 Stream 和 ML 部分,這也是未來在研究 Spark 時會比較重視的部分。 Apache Spark 是由 UC Berkeley AMP 實驗室所開發的雲端運算框架,用來構建大型的,低延遲的資料分析系統。比較起其他雲端運算架構,像是 IBM 的InfoSphere、或是 Strom 的流計算 (Stream Computing),Spark 繼承了MapReduce 中根據資料位置移動計算的精神 (moves compute processes to the data),並在此架構上,引進了記憶體層 (in-memory) 計算的概念,提供使用者對於暫存資料的控管,減低在迭代時所需要的資料存取時間。
Spark 沿用了 HDFS 的分散式資料儲存結構,同時加入了以Tachyon為基礎的分散式內存系統,提供資料在記憶體中的管理。在Spark中,所有的資料單元被表示為RDD (Resilient Distributed Dataset),RDD 是分佈在一組叢集中的唯讀物件集合 (也可為可讀寫的物件,在之後會說明),RDD將一份資料存放在多個分區上,並在運算時,對於每一個分區進行相同的動作。藉由備份和血統 (Lineage) 的機制,RDD也提供雲端需要的容錯機制。RDD可以指定成7種不同的儲存等級 (例如: 記憶體或是硬碟),在Spark中, RDD擁有兩種建立模式:
可以從檔案中 (包括 HDFS 和 HBase) 創建
或是從另一個RDD中產生
當進行完運算後,所產生的RDD也可以存回HDFS或是檔案。
在 Spark 中,所有的資料單元被表示為 RDD,因此在進行流運算時,處理的是DStream,也就是一系列的 RDD 輸入,而不是一筆筆連續的資料輸入。考慮到源源不斷的資料輸入,Spark Streaming 會先把進入的資料按照時間切分成不同的區塊,而每一格區塊則直接對應產生一個 RDD 資料集合,並放入Spark中進行RDD 的運算,當然,輸出的格式也是一連串 RDD 的形式。使用者能夠根據需求,將資料轉傳入 HDFS、檔案或是資料庫中。
和其他雲端計算框架相較,Spark Streaming 擁有相對簡單的計算架構,雖然無法到達毫秒等級,卻能夠平衡運算效率以及即時處理的需求。和其他雲計算平台的比較如下表:
Platforms
Spark
Storm
Hadoop MapReduce
Programming model
In-memory;
RDD-based
Graphical;
Node-based
MapReduce
Complexity
Medium
Most complex
Simplest
Data processing
RDD
Tuple
HDFS
Streaming
Yes (DStream)
Yes (Tuple)
No
Machine learning
Yes (MLlib)
Yes (Trident-ml)
Yes (Mahout)
Processing mode
Batch and stream
Only stream
Only batch
Latency
second
Sub-second
Long
400,000 Records/s/node
10,000 Records/s/node
--
除了 Spark Streaming 之外,在 Spark 上也成立了一個 MLlib 專案,負責提供機器學習 (Machine Learning) 演算法的函式庫。
在 MLlib 中,已經實作了多種樣態的機器學習演算法,包括分類法中的 SVM (Support Vector Machine)、K-means等,除了估計與分類演算法之外,MLlib 也提供了一些分析的工具,例如: 隨機訊號的產生、假設檢定、SVD、 PCA 等。這些工具都是建立於 Spark 所定義的 RDD 運算上,使得 Spark 的管理節點能夠基於資料所在的位置,將運算分散到叢集中的工作結點上。
同時,對於目前盛行的深度學習 (deep learning),雖然 Spark MLlib 本身並沒有支援,不過也有像是 Deeplearning4j 的專案支援,也有許多人探討如何利用 Spark 加速深度學習 (主要透過 Spark SQL),有興趣的同學可以找資料看看。
我們之後會對 MLlib 進行更詳細的說明並解釋。