http://www.16kan.com/post/113877.html Spark是一個小巧玲瓏的項目,由Berkeley大學的Matei爲主的小團隊所開發。使用的語言是Scala,項目的core部分的代碼只有63個Scala文件,充分體現了精簡之美。 Spark之依賴(1)Map Reduce模型 使用MapReduce模型解決大數據並行計算的問題,帶來的最大優勢,是它和Hadoop的同屬一家人。因爲同屬於MapReduce並行編程模型,而不是MPI和OpenMP其它模型,因此,複雜的算法,只要能夠以Java算法表達,在Hadoop上運行的,就能以Scala算法表達,在Spark上運行,而速度有倍數的提升。相比之下,在MPI和Hadoop算法之間切換,難度就大多了。 (2)函數式編程 (3)Mesos (4)HDFS和S3 Spark支持2種分佈式存儲系統:HDFS和S3。應該算是目前最主流的兩種了。對文件系統的讀取和寫入功能是Spark自己提供的,藉助Mesos分佈式實現。如果自己想做集羣試驗,又沒有HDFS環境,也沒有EC2環境的話,可以搞個NFS,確保所有MESOS的Slave都可以訪問,也可以模擬一下。 Spark的術語(1)RDD(Resilient distributed datasets ) 彈性分佈式數據集,Spark中最核心的模塊和類,也是設計精華所在。你將它理解爲一個大的集合,將所有數據都加載到內存中,方便進行多次重用。第一,它是分佈式的,可以分佈在多臺機器上,進行計算。第二,它是彈性的,在計算處理過程中,機器的內存不夠時,它會和硬盤進行數據交換,某種程度上會減低性能,但是可以確保計算得以繼續進行。關於RDD的詳細闡述,後面會單獨再起一篇文章。
Spark的本地模式支持多線程,有一定的單機併發處理能力。但是不算很強勁。本地模式可以保存結果在本地或者分佈式文件系統,而Mesos模式一定需要保存在分佈式或者共享文件系統。 (3)Transformations和Actions 對於RDD,有兩種類型的動作,一種是Transformation,一種是Action。它們本質區別是:
關於這兩個動作,在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產品 |
Spark隨談(一)—— 總體架構
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.