363
汽車大全
Spark簡介及其在ubuntu下的安裝使用
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-shell就可以開啟交互式spark命令環境,這是一個基於scala的環境,有點類似mongodb的cmd環境是V8引擎下的js環境,應該是spark自帶的而不需要外部引用SCALA_HOME。
然後你就可以根據官方document裏的quick-start進行一些文件讀取操作,並對內容進行處理,做mapreduce呀之類的事情。同時,也是可以去讀hdfs上的file的
scala> val textFile = sc.textFile("README.md")
scala> textFile.count() // Number of items in this RDD scala> textFile.first() // First item in this RDD例子不舉了。如果要跑例子,需要先下載並引用scala,然後用sbt構建下spark。sbt是scala的構建工具,相當於是java的maven。
下好的scala解壓之後,是可以在SCALA_HOME/bin下執行scala進入scala命令環境的。完成構建之後(我下載的spark解壓之後不需要sbt構建也可以直接run這些例子。),就可以跑例子了。
sbt/sbt package
構建之後。還需要先在$SPARK_HOME/conf/ 下修改那個spark-env.sh,在文件內添加一行"SCALA_HOME=xxx"。
./run spark.examples.SparkPi local在跑這個例子的時候,可能輸出結果會有一個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的結果看,好像也沒有什麼別的文檔也可以參考了。基本上也就是我列舉的這些,所以你看完這些應該就可以啦。
參考
同一個博客裏的幾篇:
淘寶博客裏的幾篇:
官網文檔:
(全文完)
最後更新:2017-04-03 16:48:54