Spring Boot 應用中通過 YARN 來調用 Spark 作業的來執行數據質檢。這是一個非常經典的數據質量檢測、數據優化的常用架構,將Web服務/業務處理(Spring Boot)與大數據質檢(Spark on YARN)解耦。
核心架構圖
首先,通過一張圖來理解整個流程的架構:
整個流程的核心在于,Spring Boot 應用并不直接執行 Spark 作業,而是作為一個提交客戶端,將作業提交到 YARN 集群上,并由 YARN 來負責資源管理和任務調度。
一、核心原理與組件
1. Spark on YARN 的模式
Spark on YARN 有種模式,這兩種模式決定了 ApplicationMaster (AM) 的角色:
yarn-cluster
(推薦用于生產環境):- Driver 運行在 YARN 的 ApplicationMaster 中。這意味著 Driver 進程是在 YARN 集群的某個節點上啟動的。
- Spring Boot 應用在提交作業后,可以與作業斷開連接,作業會繼續在 YARN 上運行直至結束。
- 適合長時間運行的作業。
yarn-client
(通常用于交互式/調試):- Driver 運行在提交作業的客戶端機器上(即運行 Spring Boot 應用的那臺機器)。
- Spring Boot 應用必須保持運行,否則 Driver 退出會導致作業失敗。
- 作業的輸出(如
stdout
)會直接打印到客戶端的控制臺,方便調試。
技術細節:在 Spring Boot 中調用,我們通常使用 yarn-cluster
模式,這樣我們的應用服務就不會被大量的 Spark 計算任務所拖累,實現了服務與計算的分離。
2. 關鍵組件:spark-submit
與 SparkLauncher
spark-submit
: 是 Spark 官方提供的用于提交作業的 shell 腳本。最簡單的方式是在 Spring Boot 中通過Runtime.getRuntime().exec()
來調用這個腳本。SparkLauncher
: 是 Spark 提供的 Java API,專門用于以編程方式將 Spark 應用程序啟動到集群上。這是更優雅、更易于集成和管理的方式,推薦使用。
二、兩種實現方式的技術細節
方式一:使用 ProcessBuilder
調用 spark-submit
腳本
這種方式本質上是將你在命令行手動執行的操作自動化。
步驟:
- 在部署了 Spark 和 Hadoop 客戶端的機器上運行 Spring Boot 應用。
- 構建完整的
spark-submit