---
# System prepended metadata

title: Apache Spark introduction
tags: [' Spark', Apache]

---

---
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

![](https://i.imgur.com/P1M5YL1.png)

### 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
