iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
AI & Data

30天認識主流大數據框架:Hadoop + Spark + Flink系列 第 13

Day13 - Spark 介紹 (1):簡介與架構

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230928/20138939S4TQffoQ8D.png

為什麼需要 Spark ?

MapReudce 的出現雖然解決了大數據離線計算的需求,但其有一些缺點存在,比如:

  • 高延遲:MapReudce 在計算時通常需要進行多次的硬碟 I/O,這大大降低了計算性能,也造成了較高的處理延遲。
  • 編程模型複雜:開發人員需要手動編寫 Map 與 Reduce 函式,同時還需要處理資料分發、排序以及錯誤處理等問題,這使得開發與維護 MapReduce 變得非常繁瑣。
  • 適用性受限:MapReduce 適合用於離線的批處理上,在實時數據流、迭代計算或是一些複雜的處理中表現較差。

Spark 的出現即是為了解決上述這些問題。

Spark 簡介

Apache Spark 跟 MapReduce 一樣屬於分散式的大數據的處理框架,最初由加州大學柏克萊分校的 AMPLab 開發,使用 Scala 編寫,目標是「One stack to rule them all」,也就是在一套架構下處理所有的大數據任務,現在由 Apache 基金會負責維運。

Spark 的優點包括:

  • 速度快:Spark 通過內存(記憶體)計算執行引擎優化來降低數據處理的延遲,在處理速度上優於傳統的 MapReduce,官方說法是快了 10~100 倍。此外,由於 Spark 將中間數據保留在內存當中,因此特別適合用在迭代計算上,如機器學習圖處理
  • 簡化編程模型:Spark 提供了高級 API,如 Spark SQLDataFrameStructured Streaming,使用者能更輕鬆地編寫程式,而不用手動編寫 Map 和 Reduce 函式。另外,Spark 也支援多種程式語言,包括 ScalaJavaPythonR,使用者可以選擇熟悉的程式語言進行開發。
  • 高適用性:除了批處理外,Spark 擁有豐富的生態系統,包括 Spark Streaming (實時處理)、MLlib(機器學習)和 GraphX(圖形處理),能適用在多種處理情境。

Spark 抽象層

在 Spark 的架構中包含了兩個重要的抽象層 (abstraction layer),分別是:

  • Resilient Distributed Datasets (RDD)
    RDD 是 Spark 中的一種抽象數據結構,是 RDD 的核心數據結構,接下來的文章會對 RDD 做更詳細的介紹。
  • Directed Acyclic Graph (DAG)
    DAG 是一種圖形結構 (有向無環圖),用來表示 Spark 作業的執行計畫、描述作業之間的依賴關係和任務順序,Spark 會將使用者的操作轉換為 DAG,以優化性能與資源的利用效率。

Spark 架構

Spark Core 實現了 Spark 的基本功能,採用主從架構 (Master / Slave),主要有三個核心組件,分別是 Spark DriverCluster ManagerSpark Executor
https://ithelp.ithome.com.tw/upload/images/20230928/20138939dLYpHHTJ4a.png
(圖片來源: Spark Components)

驅動程序 Spark Driver

主程式 (Master) 的部分,一般會在集群中的一個節點上,透過 SparkContext 物件來協調應用程式的執行,負責分配任務給各個工作節點,並監控應用程式的執行狀況。

集群管理器 Cluster Manager

負責集群的資源管理任務,可以選擇使用:

  • Standalone:Spark 內建的資源管理器,適合單一集群上的應用,提供基本的資源分配和管理功能。
  • Apache Mesos (Deprecated):分佈式資源管理器,可用於多個集群上,包括 Spark 應用程序,並提供彈性的資源分配和多工作負載管理。
  • Hadoop YARN:Hadoop 的資源管理框架,能夠集成Spark 並共享集群資源,實現多種工作負載共存。更詳細的工作原理可以參考前幾天的文章:Day05 Hadoop 介紹
  • Kubernetes – 容器化的集群管理平台,支援 Spark 容器的運行,提供彈性和自動化的資源配置和管理。

執行程序 Spark Executor

每個工作節點上運行著多個執行程序,每個執行程序負責處理任務的一部分。它們能夠在記憶體中存儲數據,以實現高性能的計算。

每個應用程式 (SparkContext 物件) 都有自己的執行程序,應用程式之間彼此獨立,有各自的執行程序,這也導致除非使用外部存儲系統,否則不同應用程式之間的資料無法直接進行分享。

預告

明天會深入介紹 Spark 的數據結構:RDDDataFrameDataSet

參考資料

《實戰大數據 (Hadoop + Spark + Flink) 從平台構建到交互式數據分析 (離線/實時)》- 楊俊
Apache Spark Architecture – Detailed Explanation
Spark Components


上一篇
Day12 - Hive 基本操作
下一篇
Day14 - Spark 介紹 (2):RDD
系列文
30天認識主流大數據框架:Hadoop + Spark + Flink30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言