--- title: Apache Spark introduction tags: Apache, Spark description: Apache Spark introduction --- # Apache Spark introduction Spark 沿用 HDFS 的管理架構,由 MapReduce 模型繼承而來,提供資料在記憶體中的管理。在 Spark 中,所有的資料單元被表示為 RDD (Resilient Distributed Dataset),RDD 是分布在記憶體中可讀寫的物件,RDD 將一份資料存放在多個分區上,並在運算時,對於每一個分區進行相同的動作。藉由備份和血統 (Lineage) 的機制,RDD 也提供雲端需要的容錯機制。RDD 可以指定成 7 種不同的儲存等級 (例如: 記憶體或是硬碟),在 Spark 中, RDD 擁有兩種建立模式: * 從檔案中 (包括 HDFS 和 HBase) 創建 * 從另一個 RDD 中產生 當進行完運算後,所產生的 RDD 也可以存回 HDFS 或是檔案。 ## Apache Spark Architecture  ### Spark Core Spark Core 是該平台的基礎。它要負責內存管理、故障恢復、計劃安排、分配與監控作業,以及和存儲系統進行交互。您可以通過為 Java、Scala、Python 和 R 而構建的應用程序編程接口(API)使用 Spark Core。這些 API 會將復雜的分佈式處理隱藏在簡單的高級操作符的背後。 ### Spark SQL 是處理結構化資料所產生的元件,它允許使用者使用如同 Apache Hive 一樣透過 SQL 語法做資料查詢,除了提供 SQL 使用介面外,Spark SQL 也允許開發人員將 SQL 查詢與其他 RDD 所支援的資料處理方式一起使用。 ### Spark Streaming 在 Spark 中,所有的資料單元被表示為 RDD,因此在進行流運算時,處理的是 DStream,也就是一系列的 RDD 輸入,而不是一筆筆連續的資料輸入。考慮到源源不斷的資料輸入,Spark Streaming 會先把進入的資料按照時間切分成不同的區塊,而每一格區塊則直接對應產生一個 RDD 資料集合,並放入 Spark 中進行 RDD 的運算,當然,輸出的格式也是一連串 RDD 的形式。使用者能夠根據需求,將資料轉傳入 HDFS、檔案或是資料庫中。 ### MLlib 除了 Spark Streaming 之外,在 Spark 上也成立了一個 MLlib 專案,負責提供機器學習 (Machine Learning) 演算法的函式庫。 在 MLlib 中,已經實作了多種樣態的機器學習演算法,包括分類法中的 SVM (Support Vector Machine)、K-means等,除了估計與分類演算法之外,MLlib 也提供了一些分析的工具,例如: 隨機訊號的產生、假設檢定、SVD、 PCA 等。這些工具都是建立於 Spark 所定義的 RDD 運算上,使得 Spark 的管理節點能夠基於資料所在的位置,將運算分散到叢集中的工作結點上。 同時,對於目前盛行的深度學習 (deep learning),雖然 Spark MLlib 本身並沒有支援,不過也有像是 Deeplearning 的專案支援,也有許多人探討如何利用 Spark 加速深度學習 (主要透過 Spark SQL),有興趣的同學可以找資料看看。 ### GraphX 這是用來在 Spark 處理圖像相關資料及進行分散式圖像處理的函式庫,GraphX 提供了很多處理圖像的操作,如 subgraph 和 mapVertices 以及常見的圖形演算法。 --- ## 參考 * https://spark-nctu.gitbook.io/spark/ * https://ithelp.ithome.com.tw/articles/10194895 * https://aws.amazon.com/cn/big-data/what-is-spark/ ## Thank you! :dash: You can find me on - GitHub: https://github.com/shaung08 - Email: a2369875@gmail.com
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up