Spark隨談(一)—— 總體架構

http://www.16kan.com/post/113877.html

Spark是一個小巧玲瓏的項目,由Berkeley大學的Matei爲主的小團隊所開發。使用的語言是Scala,項目的core部分的代碼只有63個Scala文件,充分體現了精簡之美。

Spark之依賴

(1)Map Reduce模型
作爲一個分佈式計算框架,Spark採用了MapReduce模型。在它身上,Google的Map Reduce和Hadoop的痕跡很重,很明顯,它並非一個大的創新,而是微創新。在基礎理念不變的前提下,它借鑑,模仿並依賴了先輩,加入了一點改進,極大的提升了MapReduce的效率。

使用MapReduce模型解決大數據並行計算的問題,帶來的最大優勢,是它和Hadoop的同屬一家人。因爲同屬於MapReduce並行編程模型,而不是MPI和OpenMP其它模型,因此,複雜的算法,只要能夠以Java算法表達,在Hadoop上運行的,就能以Scala算法表達,在Spark上運行,而速度有倍數的提升。相比之下,在MPI和Hadoop算法之間切換,難度就大多了。

(2)函數式編程
Spark由Scala寫就,而支持的語言亦是Scala。其原因之一就是Scala支持函數式編程。這一來造就了Spark的代碼簡潔,二來使得基於Spark開發的程序,也特別的簡潔。一次完整的MapReduce,Hadoop中需要創建一個Mapper類和Reduce類,而Spark只需要創建相應的一個map函數和reduce函數即可,代碼量大大降低

(3)Mesos
Spark將分佈式運行的需要考慮的事情,都交給了Mesos,自己不Care,這也是它代碼能夠精簡的原因之一。這也算是偷了一個大懶吧,呵呵

(4)HDFS和S3

Spark支持2種分佈式存儲系統:HDFS和S3。應該算是目前最主流的兩種了。對文件系統的讀取和寫入功能是Spark自己提供的,藉助Mesos分佈式實現。如果自己想做集羣試驗,又沒有HDFS環境,也沒有EC2環境的話,可以搞個NFS,確保所有MESOS的Slave都可以訪問,也可以模擬一下。

Spark的術語

(1)RDD(Resilient distributed datasets )

彈性分佈式數據集,Spark中最核心的模塊和類,也是設計精華所在。你將它理解爲一個大的集合,將所有數據都加載到內存中,方便進行多次重用。第一,它是分佈式的,可以分佈在多臺機器上,進行計算。第二,它是彈性的,在計算處理過程中,機器的內存不夠時,它會和硬盤進行數據交換,某種程度上會減低性能,但是可以確保計算得以繼續進行。關於RDD的詳細闡述,後面會單獨再起一篇文章。


(2)Local模式和Mesos模式

Spark支持Local調用和Mesos集羣兩種模式,在Spark上開發算法程序,可以在本地模式調試成功後,直接改用Mesos集羣運行,除了文件的保存位置需要考慮以外,算法理論上不需要做任何修改。

Spark的本地模式支持多線程,有一定的單機併發處理能力。但是不算很強勁。本地模式可以保存結果在本地或者分佈式文件系統,而Mesos模式一定需要保存在分佈式或者共享文件系統。

(3)Transformations和Actions

對於RDD,有兩種類型的動作,一種是Transformation,一種是Action。它們本質區別是:

  • Transformation返回值還是一個RDD。它使用了鏈式調用的設計模式,對一個RDD進行計算後,變換成另外一個RDD,然後這個RDD又可以進行另外一次轉換。這個過程是分佈式的
  • Action返回值不是一個RDD。它要麼是一個Scala的普通集合,要麼是一個值,要麼是空,最終或返回到Driver程序,或把RDD寫入到文件系統中

關於這兩個動作,在Spark開發指南中會有就進一步的詳細介紹,它們是基於Spark開發的核心。這裏將Spark的官方ppt中的一張圖略作改造,闡明一下兩種動作的區別。

Spark On Mesos

爲了在Mesos框架上運行,安裝Mesos的規範和設計,Spark實現兩個類,一個是SparkScheduler,在Spark中類名是MesosScheduler;一個是SparkExecutor,在Spark中類名是Executor。有了這兩個類,Spark就可以通過Mesos進行分佈式的計算。

Spark會將RDD和MapReduce函數,進行一次轉換,變成標準的Job和一系列的Task。提交給SparkScheduler,SparkScheduler會把Task提交給Mesos Master,由Master分配給不同的Slave,最終由Slave中的Spark Executor,將分配到的Task一一執行,並且返回,組成新的RDD,或者直接寫入到分佈式文件系統。

基於Spark的項目

基於Spark的項目有2個,也是AMP實驗室出品

第一個是Spark內部的Bagel,Pregel on Spark,可以用Spark進行圖計算,這是個非常有用的小項目。Bagel自帶了一個例子,實現了Google的PageRank算法,實驗數據在http://download.freebase.com/wex/,感興趣的可以下載試試。

第二個是Shark,Hive On Spark,將Hive的語法遷移到Spark上,將SQL翻譯爲Spark的mapreduce運行,並且可以直接讀取hive的元數據庫和對應數據。這個項目還在獲得了2012的SIGMOD大會上獲得最佳Demo獎,目前已經進入Alpha版本,很快將會有正式版本發佈,希望它能夠是一個完全兼容現有hive,速度快10x倍的牛B產品

發佈了13 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章