[SPARK] Spark基本介紹

寫了一些Spark的文章, 才發現自己還沒介紹過Spark,
於是, 就把之前自己整理的一些資料放上來, 當作Spark的介紹,
在介紹中, 我將著重在Stream和ML部分的比較,
這也是未來在研究Spark時會比較重視的部分,

Apache Spark是由UC Berkeley AMP 實驗室所開發的雲端運算框架,
用來構建大型的, 低延遲的資料分析系統.
比較起其他雲端運算架構, 像是IBM的InfoSphere, 或是Strom的流計算,
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擁有兩種建立模式:

  1. 可以從檔案中 (包括HDFS和HBase) 創建
  2. 或是從另一個RDD中產生

當進行完運算後, 所產生的RDD也可以存回HDFS或是檔案.
  • Spark Streaming

在Spark中, 所有的資料單元被表示為RDD,
因此在進行流運算時, 處理的是DStream,
也就是一系列的RDD輸入, 而不是一筆筆連續的資料輸入,
考慮到源源不斷的資料輸入,
Spark Streaming會先把進入的資料按照時間切分成不同的區塊,
而每一格區塊則直接對應產生一個RDD資料集合, 並放入Spark中進行RDD的運算,
當然, 輸出的格式也是一連串RDD的形式,
使用者能夠根據需求, 將資料轉傳入HDFS, 檔案或是資料庫中


和其他雲端計算框架相較, Spark Streaming擁有相對簡單的計算架構,
雖然無法到達毫秒等級, 卻能夠平衡運算效率以及即時處理的需求,
和其他雲計算平台的比較如下表

Platforms
Spark
Storm
Hadoop MapReduce
Programming model
In-memory computing
RDD-based processing
Graphical computing
Tuple-based processing
MapReduce
HDFS-based processing
Complexity
Medium
Most complex
Simplest
Data processing
RDD
Tuple
HDFS
Streaming
Yes (DStream)
Yes (Each 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
-

  • Mllib
除了Spark Streaming之外, 在Spark上成立了一個Mllib專案,
負責提供機器學習 (Machine Learning) 演算法的函式庫.
在Mllib中, 已經實作了多種樣態的機器學習演算法,
包括分類法中的SVM (Support Vector Machine), K-means等
除了估計與分類演算法之外, MLlib也提供了一些分析的工具,
例如: 隨機訊號的產生, 假設檢定, SVD, PCA, 等.
這些工具都是建立於Spark所定義的RDD運算上,
使得Spark的管理節點能夠基於資料所在的位置,
將運算分散到叢集中的工作結點上.


留言

熱門文章

LTE筆記: RSRP, RSSI and RSRQ

[WiFi] WiFi 網路的識別: BSS, ESS, SSID, ESSID, BSSID

LTE筆記: 波束成型 (beamforming) 和天線陣列