Spark認知 原 薦

一、Spark體系結構

Spark是一種基於內存的開源計算框架,不同於Hadoop的MapReduce和HDFS,Spark主要包括Spark Core和在Spark Core基礎之上建立的應用框架Spark SQL、Spark Streaming、MLlib和GraphX。

Core庫中主要包括上下文Spark Context、抽象數據集RDD、調度器Scheduler、shuffle和序列器Serializer等。Spark系統中的計算、I/O、調度和shuffle等系統基本功能都在其中。

二、Spark編程模型概述

開發人員在編寫Spark應用的時候,需要提供一個包含main函數的驅動程序作爲程序的入口,開發人員根據自己的需求,在main函數中調用Spark提供的數據操縱接口,利用集羣對數據執行並行操作。見插圖:

定義主函數

Spark爲開發人員提供了兩類抽象接口。

第一類抽象接口是彈性分佈式數據集RDD,顧名思義,RDD是對數據集的抽象封裝,開發人員可以通過RDD提供的開發接口來訪問和操作數據集合,而無須瞭解數據的存儲介質(內存或磁盤)、文件系統(本地文件系統、HDFS或Tachyon)、存儲節點(本地和遠程節點)等諸多實現細節;

第二類抽象是共享變量,通常情況下,一個應用程序在運行的時候會被劃分成分佈在不同執行節點上的多個任務,從而提高計算的速度,每個任務都會有一份獨立的程序變量拷貝,彼此之間互不干擾,然而在某些情況下任務之間需要共享變量,Spark提供了兩種共享變量,它們分別是廣播變量(Broadcast Variable)和累加器(Accumulators)。

三、SparkContext

3.1、SparkContext的作用

SparkContext除了是Spark的主要入口,也可以看做是對用戶的接口,它代表與Spark集羣連接的對象,SparkContext主要存在於Driver Program中。可以用SparkContext來創建集羣中的RDD、累積量和廣播量,在後臺SparkContext還能發送任務給集羣管理器。每一個JVM只能運行一個程序,即對應的只有一個SparkContext的處於激活狀態,因此在創建新的SparkContext前需要把舊的SparkContext停止。見插圖:

sparkcontext內部調用

3.2、SparkContext的創建

SparkContext的創建過程首先要加載配置文件,然後創建SparkEnv、TaskScheduler和DAGScheduler,具體過程如下:

3.2.1、加載配置文件SparkConf

SparkConf在初始化時,需要選擇相關配置參數,包含master、appName、sparkHome、jars、environment等信息,然後通過構造方法傳遞給SparkContext,實現代碼如下:

spark相關代碼設置

3.2.2、創建SparkEnv

創建SparkConf後就需要創建SparkEnv,這裏包括很多Spark執行時的重要組件,包括MapOutputTracker、ShuffleFetcher、BlockManager等,在源碼中是通過SparkEnv類伴生對象SparkEnv Object內的createDriverEnv方法實現的。

3.3.3、創建TaskScheduler

創建SparkEnv後,就需要創建SparkContext中調度執行方面的變量TaskScheduler。

3.3.4、創建DAGScheduler

創建TaskScheduler對象後,再將TaskScheduler對象傳至DAGScheduler,用來創建DAGScheduler對象。

創建DAGScheduler後在調用其start()方法將其啓動,以上4點是整個SparkContext的創建過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章