關于Spark的基本概念和特性簡介

jopen 9年前發布 | 53K 次閱讀 Spark 分布式/云計算/大數據

Spark是近年來發展較快的分布式并行數據處理框架,可以與Hadoop聯合使用,增強Hadoop的性能。同時,Spark還增加了內存緩存、流數據處理、圖數據處理等更為高級的數據處理能力。這里簡單介紹了Spark的基本概念和特性,方便小白入門。當然了,大數據處理和分析光會了這些是遠遠不夠的,入門容易深入難,還得有數理統計、領域建模等真功夫才能做出真正有價值的成果。

1、Spark是什么?

    ○ 高可伸縮性

    ○ 高容錯

    ○ 基于內存計算

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

    ○ MapReduce屬于Hadoop生態體系之一,Spark則屬于BDAS生態體系之一

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

    ○ BDAS包含了Spark、Shark(相當于Hive)、BlinkDB、Spark Streaming(消息實時處理框架,類似Storm)等等

    ○ BDAS生態體系圖:

    關于Spark的基本概念和特性簡介

3、Spark與MapReduce

    優勢:

    ○ MapReduce通常將中間結果放到HDFS上,Spark是基于內存并行大數據框架,中間結果存放到內存,對于迭代數據Spark效率高。

    ○ MapReduce總是消耗大量時間排序,而有些場景不需要排序,Spark可以避免不必要的排序所帶來的開銷

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

4、Spark支持的API

    Scala、Python、Java等

5、運行模式

    ○ Local (用于測試、開發)

    ○ Standlone (獨立集群模式)

    ○ Spark on Yarn (Spark在Yarn上)

    ○ Spark on Mesos (Spark在Mesos)

6、運行時的Spark

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

    關于Spark的基本概念和特性簡介

7、RDD

    ○ 英文名:Resilient Distributed Dataset

    ○ 中文名:彈性分布式數據集

    ○ 什么是RDD?RDD是一個只讀、分區記錄的集合,你可以把他理解為一個存儲數據的數據結構!在Spark中一切基于RDD

    ○ RDD可以從以下幾種方式創建:

        1、集合轉換

        2、從文件系統(本地文件、HDFS、HBase)輸入

        3、從父RDD轉換(為什么需要父RDD呢?容錯,下面會提及)

    ○ RDD的計算類型:

        1、Transformation:延遲執行,一個RDD通過該操作產生的新的RDD時不會立即執行,只有等到Action操作才會真正執行。

        2、Action:提交Spark作業,當Action時,Transformation類型的操作才會真正執行計算操作,然后產生最終結果輸出。

        3、Hadoop提供處理的數據接口有Map和Reduce,而Spark提供的不僅僅有map和reduce,還有更多對數據處理的接口,如圖下所示:關于Spark的基本概念和特性簡介

8、容錯Lineage

    8.1、容錯基本概念

        ○ 每個RDD都會記錄自己所依賴的父RDD,一旦出現某個RDD的某些partition丟失,可以通過并行計算迅速恢復

    8.2、Narrow Dependent(窄依賴)和Wide Dependent(寬依賴)

        ○ RDD的依賴又分為Narrow Dependent(窄依賴)和Wide Dependent(寬依賴)

        ○ 窄依賴:每個partition最多只能給一個RDD使用,由于沒有多重依賴,所以在一個節點上可以一次性將partition處理完,且一旦數據發生丟失或者損壞可以迅速從上一個RDD恢復

        ○ 寬依賴:每個partition可以給多個RDD使用,由于多重依賴,只有等到所有到達節點的數據處理完畢才能進行下一步處理,一旦發生數據丟失或者損壞,則完蛋了,所以在這發生之前必須將上一次所有節點的數據進行物化(存儲到磁盤上)處理,這樣達到恢復。

        ○ 寬、窄依賴示例圖:

        關于Spark的基本概念和特性簡介

9、緩存策略

    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)

10、提交的方式

    ○ 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]

例如:

關于Spark的基本概念和特性簡介

關于更詳細的submit-spark參考官方文檔:http://spark.apache.org/docs/latest/submitting-applications.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!