轉:http://blog.csdn.net/pelick/article/details/9888311javascript
Spark概述html
Spark 是一種與 Hadoop 類似的開源集羣計算環境,在性能和迭代計算上頗有看點,如今是Apache孵化的頂級項目吧。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發,可用來構建大型的、低延遲的數據分析應用程序。Spark 啓用了內存分佈數據集,除了可以提供交互式查詢外,它還能夠優化迭代工做負載。Spark 是在 Scala 語言中實現的,它將 Scala 用做其應用程序框架,而Scala的語言特色也鑄就了大部分Spark的成功。與 Hadoop 不一樣,Spark 和 Scala 可以緊密集成,其中的 Scala 能夠像操做本地集合對象同樣輕鬆地操做分佈式數據集。儘管建立 Spark 是爲了支持分佈式數據集上的迭代做業,可是實際上它是對 Hadoop 的補充,能夠在 Hadoop文件系統中並行運行。經過名爲 Mesos 的第三方集羣框架能夠支持此行爲。java
雖然 Spark 與 Hadoop 有類似之處,但它提供了具備有用差別的一個新的集羣計算框架。首先,Spark 是爲集羣計算中的特定類型的工做負載而設計,即那些在並行操做之間重用工做數據集(好比機器學習算法)的工做負載。爲了優化這些類型的工做負載,Spark 引進了內存集羣計算的概念,可在內存集羣計算中將數據集緩存在內存中,以縮短訪問延遲。python
Spark 還引進了名爲 彈性分佈式數據集 (RDD) 的抽象。RDD 是分佈在一組節點中的只讀對象集合。這些集合是彈性的,若是數據集一部分丟失,則能夠對它們進行重建。重建部分數據集的過程依賴於容錯機制,該機制能夠維護 「血統」(即充許基於數據衍生過程重建部分數據集的信息)。RDD 被表示爲一個 Scala 對象,而且能夠從文件中建立它;一個並行化的切片(遍及於節點之間);另外一個 RDD 的轉換形式;而且最終會完全改變現有 RDD 的持久性,好比請求緩存在內存中。git
Spark 中的應用程序稱爲驅動程序,這些驅動程序可實如今單一節點上執行的操做或在一組節點上並行執行的操做。與 Hadoop 相似,Spark 支持單節點集羣或多節點集羣。對於多節點操做,Spark 依賴於 Mesos 集羣管理器。Mesos 爲分佈式應用程序的資源共享和隔離提供了一個有效平臺。該設置充許 Spark 與 Hadoop 共存於節點的一個共享池中。github
Spark生態環境算法
是的,相似hadoop有HDFS,Hive,Pig等一套本身的生態環境,Spark也有一套生態環境,而這套藍圖應該也正是AMP實驗室正在繪製的。mongodb
Spark在整個生態系統中的地位如圖所示,他是基於Tachyon的。而對底層的Mesos相似與YARN調度框架,在其上也是能夠搭載如Spark,Hadoop等環境。Shark相似Hadoop裏的Hive,而其性能好撐比Hive要快成百上千倍,不過hadoop注重的不必定是最快的速度,而是廉價集羣上離線批量的計算能力。此外,上圖中還有圖數據庫,Spark Streaming以及machine learning的ML Base。也就是說,Spark這套生態環境把大數據這塊領域的數據流計算和交互式計算都包含了,而另一塊批處理計算應該由hadoop佔據,同時Spark又是能夠同HDFS交互取得裏面的數據文件的。還有一天,Spark的迭代,內存運算能力以及交互式計算,都爲數據挖掘,機器學習提供了很必要的輔助。綜上所述,Spark不容小覷,也正是筆者打算研究他的緣由。shell
國內目前豆瓣有一位牛人,讀了Spark源碼後用python寫了一個Dpark在豆瓣內部使用。性能方面應該不及Spark,由於Scala是模吸取了Erlang這樣的天生分佈式語言的一些優點,既面向對象又是函數式的,目前我也在熟悉之中。數據庫
Spark的開發者中有一位是中國的博士,這是他的微博。
Spark安裝使用
我在win7下嘗試了下,根本不能開啓spark的shell或者run一下example,最終仍是在ubuntu上實現了。在Spark的github上你能夠獲得源碼,可是在ubuntu上使用的時候,我是從網上下載了個 spark-0.7.2-prebuilt-hadoop1.tar的包,解壓以後,在$SPARK_HOME下執行
就能夠開啓交互式spark命令環境,這是一個基於scala的環境,有點相似mongodb的cmd環境是V8引擎下的js環境,應該是spark自帶的而不須要外部引用SCALA_HOME。
而後你就能夠根據官方document裏的quick-start進行一些文件讀取操做,並對內容進行處理,作mapreduce呀之類的事情。同時,也是能夠去讀hdfs上的file的
例子不舉了。若是要跑例子,須要先下載並引用scala,而後用sbt構建下spark。sbt是scala的構建工具,至關因而java的maven。
下好的scala解壓以後,是能夠在SCALA_HOME/bin下執行scala進入scala命令環境的。完成構建以後(我下載的spark解壓以後不須要sbt構建也能夠直接run這些例子。),就能夠跑例子了。
構建以後。還須要先在$SPARK_HOME/conf/ 下修改那個spark-env.sh,在文件內添加一行"SCALA_HOME=xxx"。
在跑這個例子的時候,可能輸出結果會有一個NULL什麼的錯誤,緣由在於run這個文件裏寫的匹配example的路徑是xxx-example-xxx.jar,而在SPARK_HOME/example/target/scalaxxxx路徑下的jar包是xxx-example_xxx.jar的格式,問題出在"-"和"_"上。我手動改了下jar包的名字,你也能夠在run的144-146行裏把那個匹配規則改一下,很簡單的。
作了以上的過後,就能夠慢慢試玩和探索Spark啦。固然這是本地一個standalone的部署,還能夠加master和slave的集羣部署。略了。
SparkPi這個例子的代碼就不具體說了,下面我提供一些有幫助的文檔連接,有助於spark的起步。就我今天網上google的結果看,好像也沒有什麼別的文檔也能夠參考了。基本上也就是我列舉的這些,因此你看完這些應該就能夠啦。
參考
同一個博客裏的幾篇:
淘寶博客裏的幾篇:
官網文檔: