spark概述
spark 是一種與 hadoop 相似的開源叢集計算環境,在性能和疊代計算上很有看點,現在是apache孵化的頂級項目吧。spark 由加州大學伯克利分校 amp 實驗室 (algorithms, machines, and people lab) 開發,可用來建構大型的、低延遲的資料分析應用程式。spark
啟用了記憶體分布資料集,除了能夠提供互動式查詢外,它還可以優化疊代工作負載。spark 是在 scala 語言中實作的,它将 scala 用作其應用程式架構,而scala的語言特點也鑄就了大部分spark的成功。與 hadoop 不同,spark 和 scala 能夠緊密內建,其中的 scala 可以像操作本地集合對象一樣輕松地操作分布式資料集。盡管建立 spark 是為了支援分布式資料集上的疊代作業,但是實際上它是對 hadoop 的補充,可以在 hadoop檔案系統中并行運作。通過名為 mesos 的第三方叢集架構可以支援此行為。
雖然 spark 與 hadoop 有相似之處,但它提供了具有有用差異的一個新的叢集計算架構。首先,spark 是為叢集計算中的特定類型的工作負載而設計,即那些在并行操作之間重用工作資料集(比如機器學習算法)的工作負載。為了優化這些類型的工作負載,spark 引進了記憶體叢集計算的概念,可在記憶體叢集計算中将資料集緩存在記憶體中,以縮短通路延遲。
spark 還引進了名為 彈性分布式資料集 (rdd) 的抽象。rdd 是分布在一組節點中的隻讀對象集合。這些集合是彈性的,如果資料集一部分丢失,則可以對它們進行重建。重建部分資料集的過程依賴于容錯機制,該機制可以維護 “血統”(即充許基于資料衍生過程重建部分資料集的資訊)。rdd 被表示為一個 scala 對象,并且可以從檔案中建立它;一個并行化的切片(遍布于節點之間);另一個 rdd 的轉換形式;并且最終會徹底改變現有 rdd 的持久性,比如請求緩存在記憶體中。
spark 中的應用程式稱為驅動程式,這些驅動程式可實作在單一節點上執行的操作或在一組節點上并行執行的操作。與 hadoop 類似,spark 支援單節點叢集或多節點叢集。對于多節點操作,spark 依賴于 mesos 叢集管理器。mesos 為分布式應用程式的資源共享和隔離提供了一個有效平台。該設定充許 spark 與 hadoop 共存于節點的一個共享池中。
spark生态環境
是的,類似hadoop有hdfs,hive,pig等一套自己的生态環境,spark也有一套生态環境,而這套藍圖應該也正是amp實驗室正在繪制的。
spark在整個生态系統中的地位如圖所示,他是基于tachyon的。而對底層的mesos類似與yarn排程架構,在其上也是可以搭載如spark,hadoop等環境。shark類似hadoop裡的hive,而其性能好撐比hive要快成百上千倍,不過hadoop注重的不一定是最快的速度,而是廉價叢集上離線批量的計算能力。此外,上圖中還有圖資料庫,spark streaming以及machine learning的ml base。也就是說,spark這套生态環境把大資料這塊領域的資料流計算和互動式計算都包含了,而另外一塊批處理計算應該由hadoop占據,同時spark又是可以同hdfs互動取得裡面的資料檔案的。還有一天,spark的疊代,記憶體運算能力以及互動式計算,都為資料挖掘,機器學習提供了很必要的輔助。綜上所述,spark不容小觑,也正是筆者打算研究他的原因。
國内目前豆瓣有一位牛人,讀了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的結果看,好像也沒有什麼别的文檔也可以參考了。基本上也就是我列舉的這些,是以你看完這些應該就可以啦。
參考
同一個部落格裡的幾篇:
spark安裝與學習
centos上安裝spark叢集
淘寶部落格裡的幾篇:
spark随談-翻譯指南
spark随談-整體架構
spark随談-安裝攻略
官網文檔:
quick-start
programming-guide
ibm的一篇介紹
(全文完)