Spark初探

一、Spark是什麼?

    ○ 高可伸縮性html

    ○ 高容錯java

    ○ 基於內存計算apache

二、Spark的生態體系(BDAS,中文:伯利克分析棧)

    ○ MapReduce屬於Hadoop生態體系之一,Spark則屬於BDAS生態體系之一數組

    ○ Hadoop包含了MapReduce、HDFS、HBase、Hive、Zookeeper、Pig、Sqoop等緩存

    ○ BDAS包含了Spark、Shark(至關於Hive)、BlinkDB、Spark Streaming(消息實時處理框架,相似Storm)等等網絡

    ○ BDAS生態體系圖:數據結構

    

三、Spark與MapReduce

    優點:app

    ○ MapReduce一般將中間結果放到HDFS上,Spark是基於內存並行大數據框架,中間結果存放到內存,對於迭代數據Spark效率高。框架

    ○ MapReduce老是消耗大量時間排序,而有些場景不須要排序,Spark能夠避免沒必要要的排序所帶來的開銷分佈式

    ○ Spark是一張有向無環圖(從一個點出發最終沒法回到該點的一個拓撲),並對其進行優化。

四、Spark支持的API

    Scala、Python、Java等

五、運行模式

    ○ Local (用於測試、開發)

    ○ Standlone (獨立集羣模式)

    ○ Spark on Yarn (Spark在Yarn上)

    ○ Spark on Mesos (Spark在Mesos)

六、運行時的Spark

    Driver程序啓動多個Worker,Worker從文件系統加載數據併產生RDD(即數據放到RDD中,RDD是一個數據結構),並按照不一樣分區Cache到內存中。如圖:

    

七、RDD

    ○ 英文名: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,還有更多對數據處理的接口,如圖下所示:

八、容錯Lineage

    8.一、容錯基本概念

        ○ 每一個RDD都會記錄本身所依賴的父RDD,一旦出現某個RDD的某些partition丟失,能夠經過並行計算迅速恢復

    8.二、Narrow Dependent(窄依賴)和Wide Dependent(寬依賴)

        ○ 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

相關文章
相關標籤/搜索