談一談Spark的那些事

面向面試的博客,以問答式Q/A方式呈現。


Question1:簡要介紹一下 Spark 架構?

Answer1:

Spark 提供了一個全面、統一的框架用於管理各種有着不同性質(文本數據、圖表數據等)的數據集和數據源(批量數據或實時的流數據)的大數據處理的需求。

Spark 核心架構,如下圖所示:
在這裏插入圖片描述
對於上圖中重要概念解釋:

Spark Core(即上圖中第二層Apache Spark)
Spark Core 中包含 Spark 的基本功能,尤其是定義 RDD 的 API、操作以及這兩者上的動作,其他 Spark 的庫都是構建在 RDD 和 Spark Core 之上的。

注意:RDD,Resilient Distributed DataSet,即彈性分佈式數據集。

Spark SQL
提供 HiveQL(一種 Apache Hive 的 SQL 變體 Hive 查詢語言)與 Spark 進行交互的 API。每個數據庫表被當做一個 RDD,Spark SQL 查詢被轉換爲 Spark 操作。

Spark Streaming
對實時數據流進行處理和控制。Spark Streaming 允許程序能夠像普通 RDD 一樣處理實時數據。

Mllib(Machine Learning)
一個常用機器學習算法庫,算法被實現爲對 RDD 的 Spark 操作。這個庫包含可擴展的學習算法,比如分類、迴歸等需要對大量數據集進行迭代的操作。

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


Question2:簡要介紹一下 Spark核心組件 ?

Answer2:

Spark 組件交互,如下圖所示:

在這裏插入圖片描述
對於上圖中重要概念解釋:

Cluster Manager
在 standalone 模式中即爲 Master 主節點,控制整個集羣,監控 worker。
在 YARN 模式中爲集羣管理器。

Worker Node
作爲從節點,負責控制計算節點,啓動 Executor 或者 Driver。

Driver
運行 Application 的 main() 函數。

Executor
執行器,是爲某個 Application 運行在 worker node 上的一個進程。


Question3:簡要介紹一下 Spark編程模型 ?

Answer3:

Spark編程模型,如下圖所示:
在這裏插入圖片描述

Spark 應用程序從編寫到提交、執行、輸出的整個過程如圖所示,圖中描述的步驟如下:

  1. 用戶使用SparkContext提供的API(常用的有textFile、sequenceFile、runJob、stop等)編寫 Driver application 程序。此外 SQLContext、HiveContext 及 StreamingContext 對SparkContext 進行封裝,並提供了 SQL、Hive 及流式計算相關的 API。
  2. 使用SparkContext提交的用戶應用程序,首先會使用BlockManager和BroadcastManager 將任務的 Hadoop 配置進行廣播。然後由 DAGScheduler 將任務轉換爲 RDD 並組織成 DAG,DAG 還將被劃分爲不同的 Stage。最後由 TaskScheduler 藉助 ActorSystem 將任務提交給集羣管理器(Cluster Manager)。
  3. 集羣管理器(ClusterManager)給任務分配資源,即將具體任務分配到Worker上,Worker創建 Executor 來處理任務的運行,運行結果保存到Store存儲中。Standalone、YARN、Mesos、EC2 等都可以作爲 Spark的集羣管理器;HDFS、Amzon、S3、Tachyon等都可以作爲Store存儲。

Question4:介紹一下 Spark計算模型 ?

Answer4:

Spark計算模型運作圖,如下所示:
在這裏插入圖片描述

上圖中,RDD 英文全稱 Resiliennt Distributed Datasets,譯爲 彈性分佈式數據集 ,可以看做是對各種數據計算模型的統一抽象,Spark 的計算過程主要是 RDD 的迭代計算過程。RDD 的迭代計算過程非常類似於管道,即上圖中每一個分區(從分區1到分區N)可以看做是一個管道。分區數量取決於 partition 數量的設定,每個分區的數據只會在一個 Task 中計算。所有分區可以在多個機器節點的 Executor 上並行執行。


Question5:談一談 Spark運行流程 ?

Answer5:

Spark運行流程圖,如下圖所示:
在這裏插入圖片描述
對於上圖的解釋:

  1. 構建 Spark Application 的運行環境,啓動 SparkContext。
  2. SparkContext 向資源管理器(可以是 Standalone、Mesos 、Yarn )申請運行Executor 資源,並啓動 StandaloneExecutorbackend 。
  3. Executor 向 SparkContext 申請 Task 。
  4. SparkContext 將應用程序分發給 Executor。
  5. SparkContext 構建成 DAG 圖,將 DAG 圖分解成 Stage 、將 Taskset 發送給 Task Scheduler ,最後由 Task Scheduler 將 Task 發送給 Executor 運行。
  6. Task 在 Executor 上運行,運行完釋放所有資源。

Question6:介紹一下 Spark RDD流程 ?

Answer6:

Spark RDD流程圖,如下所示:
在這裏插入圖片描述
對於上圖的解釋:

  1. 創建 RDD 對象。
  2. DAGScheduler 模塊介入運算,計算 RDD 之間的依賴關係,RDD 之間的依賴關係就形成了DAG。
  3. 每一個 Job 被分爲多個 Stage。劃分 Stage 的一個主要依據是當前計算因子的輸入是否是確定的,如果是則將其分在同一個 Stage,避免多個 Stage 之間的消息傳遞開銷。

Question7:介紹一下 Spark RDD ?

Answer7:

(1 )RDD 的創建方式

1)從Hadoop文件系統(或與Hadoop兼容的其他持久化存儲系統,如Hive、Cassandra、HBase)輸入(例如 HDFS)創建。
2)從父 RDD 轉換得到新 RDD。
3)通過 parallelize 或 makeRDD 將單機數據創建爲分佈式 RDD。

(2 )RDD 的兩種操作算子 ( 轉換(Transformation)與行動(Action) )

對於 RDD 可以有兩種操作算子:轉換(Transformation)與行動(Action)。

1) 轉換(Transformation):Transformation操作是延遲計算的,也就是說從一個RDD轉換生成另一個 RDD 的轉換操作不是馬上執行,需要等到有 Action 操作的時候纔會真正觸發運算。
在這裏插入圖片描述

2)行動(Action):Action 算子會觸發 Spark 提交作業(Job),並將數據輸出 Spark 系統。
在這裏插入圖片描述

在這裏插入圖片描述

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