3 Spark 的設計與執行原理
簡答題
T1 Spark 是基於記憶體計算的大資料計算平臺,請闡述 Spark 的主要特點。🌱
答:
① 執行速度快:Spark使用先進的有向無環圖執行引擎,以支援迴圈資料流與記憶體計算;
② 容易使用:Spark 支援多種語言進行程式設計,簡潔的 API 設計有助於使用者輕鬆構建並行程式,並且可以透過 Spark Shell 進行互動式程式設計;
③ 通用性:Spark 提供了完整而強大的技術棧,包括SQL查詢、流式計算、機器學習和圖演算法元件,這些元件可以無縫整合在同一個應用中,足以應對複雜的計算;
④ 執行模式多樣:Spark 可執行於獨立的叢集模式中,或者執行於 Hadoop 中,也可執行於雲環境中,並且可以訪問 HDFS、HBase、Hive 等多種資料來源。
T2 Spark 的出現是為了解決 Hadoop MapReduce 的不足,試列舉 Hadoop MapReduce 的幾個缺陷,並說明 Spark 具備哪些優點。
答:
① Hadoop MapReduce 的缺陷:
(1)採用程序模型,任務啟動開銷較大;
(2)每次迭代計算都要從磁碟讀資料,計算完成後需要將中間結果寫入到磁碟中,I/O 開銷大。
(2)是個人理解
② Spark 的優點:
(1)多執行緒執行具體任務,減少任務啟動的開銷;
(2)Executor 中有一個 BlockManager 儲存模組,會將記憶體和磁碟共同作為儲存裝置,當需要多輪迭代計算時,可以將中間結果儲存到這個儲存模組裡,下次需要時,就可以直接讀取該儲存模組裡的資料,而不需要讀取HDFS等檔案系統的資料,因而有效減少了 I/O開銷;或者在互動式查詢場景下,預先將表快取到該儲存系統上,從而可以提高讀寫I/O效能。
T3 美國加州大學伯克利分校提出的資料分析軟體棧 BDAS 認為目前的大資料處理可以分為哪 3 個型別?
答:
① 複雜的批處理資料;
② 基於歷史資料的互動式查詢;
③ 基於實時資料流的資料處理。
T4 Spark 已打造出結構一體化、功能多樣化的大資料生態系統,請闡述 Spark 的生態系統。🌱
答:Spark 的設計遵循“一個軟體棧滿足不同應用場景”的理念,逐漸形成了一套完整的生態系統,既能夠提供記憶體計算框架,也可以支援SQL 即時查詢、實時流式計算、機器學習和圖計算等。
Spark 的生態系統主要包含了 Spark Core、Spark SQL、Spark Streaming、MLlib 和 GraphX 等元件,各個元件的具體功能如下:
① Spark Core: 包含 Spark 最基礎和最核心的功能,如記憶體計算、任務排程等,主要面向批資料處理。
② Spark SQL: 用於結構化資料處理的元件;允許開發人員直接處理 RDD,同時也可查詢 Hive、HBase 等外部資料來源。
③ Spark Streaming: 是一種流計算框架,可以支援高吞吐量、可容錯處理的實時流資料處理。
④ MLlib 和 GraphX:支援機器學習和圖計算。
T5 從 Hadoop+Storm 架構轉向 Spark 架構可帶來哪些好處?❌
答:
① 更高的效能:Spark採用記憶體計算模型,相對於 Hadoop+Storm 的磁碟讀寫操作,Spark 的計算速度更快。Spark 將資料儲存在記憶體中進行處理,可以有效地減少磁碟讀寫的開銷,從而提供更高的效能和更低的延遲。
② 更好的實時處理能力:Hadoop+Storm 架構中,實時資料處理主要由 Storm 負責,但 Storm 的處理延遲相對較高。而 Spark 具有更好的實時處理能力,透過 Spark Streaming 可以實時處理資料流,並提供低延遲的結果輸出。
③ 簡化的開發和管理:Spark 提供了簡潔易用的 API 和開發工具,使得開發人員能夠更快地構建和除錯大規模資料處理應用程式。
書上沒答案,按照自己理解整的
T6 請闡述 “Spark on YARN” 的概念。
答:Spark 可執行於 YARN 之上,與 Hadoop 進行統一部署,即 "Spark on YARN"。
T7 請闡述如下 Spark 的幾個主要概念:RDD、DAG、階段、分割槽、窄依賴、寬依賴。🌱
答:
① RDD:是彈性分散式資料集的簡稱,是分散式記憶體的一個抽象概念,提供了一種高度受限的共享記憶體模型;
② DAG:是有向無環圖的簡稱,反映 RDD 之間的依賴關係;
③ 階段:是作業的基本排程單位,一個作業會分為多組任務,每組任務被稱為“階段", 或者也被稱為“任務集”。
④ 分割槽:分割槽是將資料劃分為較小的塊,以便並行處理。RDD可以被分為多個分割槽,每個分割槽都是資料集的一個子集。
⑤ 寬依賴和窄依賴:這是 RDD 中的兩種依賴關係,其中,窄依賴不包含 Shuffle 操作,而寬依賴則包含 Shuffle 操作。窄依賴表現為一個父 RDD 的分割槽對應於一個子 RDD 的分割槽,或多個父 RDD 的分割槽對應於一個子 RDD 的分割槽;寬依賴則表現為存在一個父 RDD 的一個分割槽對應一個子 RDD 的多個分割槽。
T8 spark 對 RDD 的操作主要分為行動(Action)和轉換(Transformation)兩種型別,兩種操作的區別是什麼?🌱
答:轉換操作接受 RDD 並返回 RDD,而行動操作接受 RDD 但是返回非 RDD (即輸出一個值或結果)。