Spark設計思想淺析

Spark is no rocket science!——博主算法

 

瞭解分佈式計算的朋友,必定知道DAG這樣一個概念。其實我接觸DAG也是在學習MapReduce時瞭解到的。(具體可查閱《大數據日知錄:架構與算法》這本書。推薦閱讀。)編程

DAG,有向無環圖。能夠腦補一下DAG是個什麼東西:有向、無環、圖,如是而已,意思實在是再明白不過了。若是把DAG講的複雜一點,還會涉及到DAG計算系統的三層結構等較深刻的設計與實現細節。網絡

還有一個概念你們也應該有所瞭解:批處理計算系統。批處理,批量處理。批量,有數據量巨大的意思。批處理計算系統,就是要在巨大的數據量上作計算。架構

Spark就是一個DAG的批處理計算系統。MapReduce算一個DAG的批處理計算框架。框架

有向無環圖的計算過程,相鄰的兩個節點之間如何傳輸數據?在MapReduce框架中,使用的是先將計算結果保存到磁盤,而後經過網絡傳輸到下一節點。把計算結果保存到磁盤有一個問題,那就是磁盤的讀寫速度,以固態硬盤爲例,大約爲500M/s,這個速度已經很快了;而DDR3內存的讀寫速度大體在8G/s左右。這差距在一個數量級。節點之間網絡傳輸的速度能夠提升到千兆甚至萬兆,在硬件支持的情形下,大體也有1G/s的傳輸速度。能夠說,磁盤的讀寫是最耗時的。機器學習

減小磁盤讀寫的比重是提升計算速率的一個重要方面。因此Berkeley實驗室提出了RDD這樣一個概念。一段文字:分佈式

  RDD具有像MapReduce等數據流模型的容錯特性,而且容許開發人員在大型集羣上執行基於內存的計算。現有的數據流系統對兩種應用的處理並不高效:一是迭代式算法,這在圖應用和機器學習領域很常見;二是交互式數據挖掘工具。這兩種狀況下,將數據保存在內存中可以極大地提升性能。爲了有效地實現容錯,RDD提供了一種高度受限的共享內存,即RDD是隻讀的,而且只能經過其餘RDD上的批量操做來建立。儘管如此,RDD仍然足以表示不少類型的計算,包括MapReduce和專用的迭代編程模型(如Pregel)等。咱們實現的RDD在迭代計算方面比Hadoop快20多倍,同時還能夠在5-7秒內交互式地查詢1TB數據集。——Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing譯文工具

  

除了讀寫速率的提升引發的計算速率的提高,另一方面,在MapReduce計算框架下,每一個job只能有單一一個Reduce,每一個job啓動開銷較大的問題也在更通用的DAG模型下獲得瞭解決。爲何?DAG模型是Map/Reduce任務的抽象化。在Spark這個DAG批處理計算系統裏,有更多的Transformation和action能夠選擇,也包括了Map和Reduce。oop

相關文章
相關標籤/搜索