Saturday, November 25, 2017

Big Data():Spark Core

Big Data():Spark Core

2017/11/25

重新施工中...

-----

Summary:

Spark 的架構在上次已有說明 [1],但一直到最近讀到一段話,才真正瞭解 Spark 的威力 [2]。Spark 的生態系如圖1 所示 [3],其簡單的說明如 [4],而詳細的 RDD 論文在 [5]。

一般而言,Spark 會拿來與 Hadoop 比較 [6]-[8]。但基本上,Spark 屬於 Haddop 生態系的一員,Spark 應對比於 MapReduce。本次主要補充 Directed Acyclic Graph (DAG) [9], [10],Spark 的 Scala 程式碼,可以參考 [9]。

-----

Outline

1. Spark Core
2. Spark and Hadoop
3. DAG
4. Spark Core Programming 

-----

1. Spark Core

「Apache Spark 為 in-memory 和分散式計算提供了快速且通用的解決方案,其 APIs 可用 Scala、Java、Python 和 R 語言完成。

Spark 的特別之處在於它提供了一組基於主要功能(稱為 Spark Core)的高級框架,用於執行結構化與基於 SQL 的資料處理(Spark SQL),機器學習(MLlib 和 SparkML),圖形處理 GraphX)和串流處理(Spark Streaming)。

雖然坊間有許多解決方案可以單獨執行上述功能,但 Spark 的特點在於它能讓你整合這些框架來達成你要的目的。例如,你可以用 Spark Streaming 寫一個串流應用程式,內部卻使用 SQL 查詢(由 Spark SQL 支援)來進行資料處理。」

上面一小段話翻譯於 [2]。

內容的重點在,SQL、ML、Streaming 等,所有的應用,都可以用 RDD 的框架,也就是 in-memory 的方式一氣呵成。

-----


Fig. 1. Spark [3].

-----


2. Spark and Hadoop

Spark 經常被拿來與 Hadoop 做比較 [6], [7]。

事實上,[8] 裡面提到的一個 Spark 重點,也跟上面 [2] 相呼應,是 Spark Lambda Architecture。

「其中包含3層,Batch Layer,Speed Layer 和 Serving Layer,由於 Batch Layer 和 Speed Layer 的數據處理邏輯是一致的,所以如果用 Hadoop 作為 Batch Layer,而用 Storm 作為Speed Layer,你需要維護兩份使用不同技術的代碼。 而 Spark 可以作為 Lambda Architecture 一體化的解決方案 [8]。」

-----

3. DAG 

「在 Spark 中,計算被建模成有向無環圖(DAG:directed acyclic graph),其中每一個頂點都代表一個彈性分散式數據集(RDD:Resilient Distributed Dataset),每一條邊都代表對 RDD 的一個運算。RDD 是被分到了不同邏輯分區的對象的集合,這些邏輯分區是作為 in-memory 存儲和處理的,帶有到磁碟的 shuffle/overflow。 在一個 DAG 中,從頂點 A 到頂點 B 的邊 E 表示:RDD B 是在 RDD A 上執行運算 E 后得到的結果。運算有兩種:變換(transformation)和動作(action)。變換(比如:映射、過濾、連接)是指在一個 RDD 上執行一種運算生成一個新的 RDD。」[9]

DAG,由 RDD 等組成。請看圖2 自明。

施工中...

-----


Fig. 2. DAG [10].

-----

4. Spark Core Programming

施工中...

-----

結論:

施工中...

-----

References

[1] Big Data(四):Spark
http://hemingwang.blogspot.tw/2017/08/big-dataspark.html

[2] Spark is unique in how it lets you combine the frameworks to achieve your goals.

[3] 10 Things I Wish I Knew Before Using Apache SparkR - The Databricks Blog
https://databricks.com/blog/2016/12/28/10-things-i-wish-i-knew-before-using-apache-sparkr.html

[4] 談談基於 Spark 的數據分析
https://www.etusolution.com/index.php/tw/news/blog/97-blog/technical-point-of-view/552-20150601
 
[5] Zaharia, Matei, et al. "Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing." Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation. USENIX Association, 2012.
https://www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf

[6] 与 Hadoop 对比,如何看待 Spark 技术? - 知乎
https://www.zhihu.com/question/26568496 

[7] Spark可以完全替代hadoop吗? - 知乎
https://www.zhihu.com/question/51378885 

[8] Spark与Hadoop对比 _ Geosmart's Notes
http://geosmart.github.io/2017/10/12/Spark%E4%B8%8EHadoop%E5%AF%B9%E6%AF%94/ 

[9] 橫向對比三大分散式機器學習平台:Spark、PMLS、TensorFlow-中國新聞網
https://www.xcnnews.com/kj/161329.html

[10] 演算法筆記 - Directed Acyclic Graph
http://www.csie.ntnu.edu.tw/~u91029/DirectedAcyclicGraph.html

[11] Apache Spark Core Programming
https://www.tutorialspoint.com/apache_spark/apache_spark_core_programming.htm

No comments: