○ 高可伸縮性html
○ 高容錯java
○ 基於內存計算apache
○ MapReduce屬於Hadoop生態體系之一,Spark則屬於BDAS生態體系之一數組
○ Hadoop包含了MapReduce、HDFS、HBase、Hive、Zookeeper、Pig、Sqoop等緩存
○ BDAS包含了Spark、Shark(至關於Hive)、BlinkDB、Spark Streaming(消息實時處理框架,相似Storm)等等網絡
○ BDAS生態體系圖:數據結構
優點:app
○ MapReduce一般將中間結果放到HDFS上,Spark是基於內存並行大數據框架,中間結果存放到內存,對於迭代數據Spark效率高。框架
○ MapReduce老是消耗大量時間排序,而有些場景不須要排序,Spark能夠避免沒必要要的排序所帶來的開銷分佈式
○ Spark是一張有向無環圖(從一個點出發最終沒法回到該點的一個拓撲),並對其進行優化。
Scala、Python、Java等
○ Local (用於測試、開發)
○ Standlone (獨立集羣模式)
○ Spark on Yarn (Spark在Yarn上)
○ Spark on Mesos (Spark在Mesos)
Driver程序啓動多個Worker,Worker從文件系統加載數據併產生RDD(即數據放到RDD中,RDD是一個數據結構),並按照不一樣分區Cache到內存中。如圖:
○ 英文名:Resilient Distributed Dataset
○ 中文名:彈性分佈式數據集
○ 什麼是RDD?RDD是一個只讀、分區記錄的集合,你能夠把他理解爲一個存儲數據的數據結構!在Spark中一切基於RDD
○ RDD能夠從如下幾種方式建立:
一、集合轉換
二、從文件系統(本地文件、HDFS、HBase)輸入
三、從父RDD轉換(爲何須要父RDD呢?容錯,下面會說起)
○ RDD的計算類型:
一、Transformation:延遲執行,一個RDD經過該操做產生的新的RDD時不會當即執行,只有等到Action操做纔會真正執行。
二、Action:提交Spark做業,當Action時,Transformation類型的操做纔會真正執行計算操做,而後產生最終結果輸出。
三、Hadoop提供處理的數據接口有Map和Reduce,而Spark提供的不只僅有map和reduce,還有更多對數據處理的接口,如圖下所示:
○ 每一個RDD都會記錄本身所依賴的父RDD,一旦出現某個RDD的某些partition丟失,能夠經過並行計算迅速恢復
○ RDD的依賴又分爲Narrow Dependent(窄依賴)和Wide Dependent(寬依賴)
○ 窄依賴:每一個partition最多隻能給一個RDD使用,因爲沒有多重依賴,因此在一個節點上能夠一次性將partition處理完,且一旦數據發生丟失或者損壞能夠迅速從上一個RDD恢復
○ 寬依賴:每一個partition能夠給多個RDD使用,因爲多重依賴,只有等到全部到達節點的數據處理完畢才能進行下一步處理,一旦發生數據丟失或者損壞,則完蛋了,因此在這發生以前必須將上一次全部節點的數據進行物化(存儲到磁盤上)處理,這樣達到恢復。
○ 寬、窄依賴示例圖:
Spark經過useDisk、useMemory、deserialized、replication4個參數組成11種緩存策略。
useDisk:使用磁盤緩存(boolean )
useMemory:使用內存緩存(boolean)
deserialized:反序列化(序列化是爲了網絡將對象進行傳輸,boolean:true反序列化\false序列化)
replication:副本數量(int)
經過StorageLevel類的構造傳參的方式進行控制,結構以下:
class StorageLevel private(useDisk : Boolean ,useMemory : Boolean ,deserialized : Boolean ,replication:Ini)
○ spark-submit(官方推薦)
○ sbt run
○ java -jar
提交時能夠指定各類參數
./bin/spark-submit --class <main-class> --master <master-url> --deploy-mode <deploy-mode> --conf <key>=<value> ... # other options <application-jar> [application-arguments]
例如:
關於更詳細的submit-spark參考官方文檔:http://spark.apache.org/docs/latest/submitting-applications.html