spark

mcxiaoracle發表於2022-07-05

Spark Core:包含Spark的基本功能;尤其是定義RDD的API、操作以及這兩者上的動作。其他Spark的庫都是構建在RDD和Spark Core之上的


Spark SQL:提供透過Apache Hive的SQL變體Hive查詢語言(HiveQL)與Spark進行互動的API。每個資料庫表被當做一個RDD,Spark SQL查詢被轉換為Spark操作。


Spark Streaming:對實時資料流進行處理和控制。Spark Streaming允許程式能夠像普通RDD一樣處理實時資料


Llib:一個常用機器學習演算法庫,演算法被實現為對RDD的Spark操作。這個庫包含可擴充套件的學習演算法,比如分類、迴歸等需要對大量資料集進行迭代的操作。



GraphX:控制圖、並行圖操作和計算的一組演算法和工具的集合。GraphX擴充套件了RDD API,包含控制圖、建立子圖、訪問路徑上所有頂點的操作





架構組成:

Spark架構的組成圖如下:


Cluster Manager:在standalone模式中即為Master主節點,控制整個叢集,監控worker。在YARN模式中為資源管理器



Worker節點:從節點,負責控制計算節點,啟動Executor或者Driver。


Driver: 執行Application 的main()函式


Executor:執行器,是為某個Application執行在worker node上的一個程式



Spark與hadoop:


Hadoop有兩個核心模組,分散式儲存模組HDFS和分散式計算模組Mapreduce


spark本身並沒有提供分散式檔案系統,因此spark的分析大多依賴於Hadoop的分散式檔案系統HDFS


Hadoop的Mapreduce與spark都可以進行資料計算,而相比於Mapreduce,spark的速度更快並且提供的功能更加豐富


構建Spark Application的執行環境,啟動SparkContext



SparkContext向資源管理器(可以是Standalone,Mesos,Yarn)申請執行Executor資源,並啟動StandaloneExecutorbackend,


SparkContext將應用程式分發給Executor

SparkContext構建成DAG圖,將DAG圖分解成Stage、將Taskset傳送給Task Scheduler,最後由Task Scheduler將Task傳送給Executor執行

Task在Executor上執行,執行完釋放所有資源



每個Application獲取專屬的executor程式,該程式在Application期間一直駐留,並以多執行緒方式執行Task。這種Application隔離機制是有優勢的,無論是從排程角度看(每個Driver排程他自己的任務),還是從執行角度看(來自不同Application的Task執行在不同JVM中),當然這樣意味著Spark Application不能跨應用程式共享資料,除非將資料寫入外部儲存系統

Spark與資源管理器無關,只要能夠獲取executor程式,並能保持相互通訊就可以了

提交SparkContext的Client應該靠近Worker節點(執行Executor的節點),最好是在同一個Rack裡,因為Spark Application執行過程中SparkContext和Executor之間有大量的資訊交換

Task採用了資料本地性和推測執行的最佳化機制












推薦閱讀:







來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2904221/,如需轉載,請註明出處,否則將追究法律責任。

相關文章