關于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生態體系圖:
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到內存中。如圖:
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,還有更多對數據處理的接口,如圖下所示:
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使用,由于多重依賴,只有等到所有到達節點的數據處理完畢才能進行下一步處理,一旦發生數據丟失或者損壞,則完蛋了,所以在這發生之前必須將上一次所有節點的數據進行物化(存儲到磁盤上)處理,這樣達到恢復。
○ 寬、窄依賴示例圖:
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]
例如:
關于更詳細的submit-spark參考官方文檔:http://spark.apache.org/docs/latest/submitting-applications.html