Saprk學習筆記之初識Spark

Spark簡介

1.1 Spark的初步認識

Spark是一個用來實現快速而通用的集羣計算的平臺。
首先,我們學習Spark首先要知道Spark的應用場景有哪些。Spark適用於各種各樣原先需要多種不同的分佈式平臺場景,包括批處理,迭代算法,交互式查詢,流處理

1.2 Spark軟件棧

Spark軟件運行棧

1.2.1 Spark Core

Spark Core實現了Spark基本功能,包含任務調度、內存管理、錯誤恢復、與存儲系統的交互等模塊。Spark Core中還包含了對彈性分佈式數據集(RDD)的API定義。RDD表示分佈式再多個計算節點上可以並行操作的元素集合,是Spark主要編程抽象。

1.2.2 Spark SQL

Spark SQL是Spark用來操作數據結構化數據的程序包。通過SparkSQL,我們可以使用SQL來查詢數據。同樣,SparkSQL還支持多個數據源,比如:Hive表,Parquet以及JSON等。

1.2.3 Spark Streaming

是Spark提供的對實時數據進行流式計算的組件。且支持與SparkCore同級別的容錯性,吞吐量以及可伸縮性。

1.2.4 MLlib

機器學習(ML)功能的程序庫。提供了很多的機器學習算法,包括分類,迴歸,聚類,協同過濾等,還提供了模型評估,數據導入等額外的支持功能。

1.2.5 Graphx

用來操作圖的程序庫,比如說社交網絡的朋友關係圖。

1.2.6 集羣管理器

Spark設計可以高效的在一個計算節點到數千個計算節點之間伸縮計算。爲了實現這樣的要求,同時獲得最大的靈活性,Spark支持在各種集羣管理器(cluster manager)上運行,包括Hadoop,Yarn,Apache Mesos以及Spark自帶的一個簡易調度器,稱之爲獨立調度器。

Spark內核

2.1 Spark內核概述

Spark內核泛指Spark核心運行機制,包括Spark核心組件的運行機制、Spark任務調度機制、Spark內存管理機制、Spark核心功能的運行原理等,熟悉掌握Spark內核原理,能夠幫助我們更好地完成Spark代碼設計,並能夠幫助我們準確鎖定項目運行過程中出現問題的所在。

2.1.1 Spark核心組件回顧

Driver
從上層來看,每個Spark應用都有一個驅動程序(Driver) 來發起集羣上的各種並行操作。驅動器程序包含應用的main函數,並且定義了集羣的分佈式集羣數據集。負責實際代碼的執行工作。Driver在Spark作業執行時主要負責:

  • 將用戶程序轉化爲作業(Job)
  • 在Executor之間調度任務(Task)
  • 跟蹤Executor的執行情況
  • 通過UI展示查詢運行和情況
    Executor
    Spark Executor節點是負責在Spark作業中運行具體任務,任務彼此之間相互獨立。Spark應用啓動時,Executor節點被同時啓動,並且始終伴隨着整個Spark 應用的生命週期而存在。如果有Executor節點發生了故障或崩潰,Spark 應用也可以繼續執行,會將出錯節點上的任務調度到其他Executor節點上繼續運行。
    Executor有兩個核心功能:
  • 負責運行組成Spark應用的任務,並將結果返回驅動器(DRIVER);
  • 他們通過自身的塊管理器(Block Manager)爲用戶程序中要求緩存的RDD提供內存式存儲。RDD是直接緩存在Executor進程內的,因此任務可以再運行時衝零分利用緩存數據加速運算。

2.1.2 Spark通用運行流程概述

Spark通用運行流程
不論Spark以任何模式進行部署,都是以如下核心步驟進行工作的:

  • 任務提交後,都會啓動Driver程序的;
  • 隨後Driver向集羣管理器註冊應用程序;
  • 之後集羣管理器根據此任務的配置文件分配Executor並啓動;
  • 當Driver所需的資源全部滿足之後,Driver開始執行main函數,Spark查詢爲懶執行,當執行到Action算子時開始反向推算,根據寬依賴進行stage對應一個Taskset,Taskset中有對個Task;
  • 根據本地化原則,Task會被分發到指定的Executor去執行,在任務執行的過程中,Executor也會不斷與Driver進行通信,報告任務運行情況。

Spark通信架構

Spark通信架構概述

Spark通訊框架中各個組件(Client/Master/Worker)可以認爲是一個個獨立的實體,各個實體之間通過消息來進行通訊。具體的組件之間的關係圖如下所示:
Spark通信組件
EndPoint(Client / Mater / Worker)有1個InBox和N個OutBox(N >=1 , N取決於當前EndPoint於多少個其他的EndPoint進行通信 , 一個與其通訊的其他EndPoint對應一個OutBox),EndPoint接收到的消息被寫入InBox,發送出去的消息寫入OutBox並被髮送到其他EndPoint的InBox中。

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