Spark程式碼在叢集上執行過程理解
spark程式碼是如何在叢集上執行的?
總體上可以概述為4步:
- 寫DataFrame/Dataset/SQL 程式碼(通過console或spark-submit提交程式碼)
- 如果程式碼有效,Spark將此轉成邏輯計劃(Logical Plan)
- Spark對計劃中的一系列transform操作進行優化,並將邏輯計劃轉成物理計劃(Physical Plan)
- Spark在叢集上執行(基於RDD操作的)物理計劃
整體上看,提交的程式碼要通過 Catalyst優化器。它會決定程式碼執不執行,以及具體執行的物理計劃如何,最後程式碼執行完成並返回結果給使用者。
邏輯計劃Logical Planning
spark程式碼執行的第一個階段就是獲取程式碼,並轉成邏輯計劃logical plan。
邏輯計劃只是將使用者提交的一系列表示式轉成最優化的檢視,僅僅表示這一系列抽象的transformation變換,而不涉及執行器executors或驅動器driver。
這個過程是如何實現的呢?都包括哪些步驟?
首先,使用者的程式碼會被轉成未解析的邏輯計劃。未解析的意思是,儘管你的程式碼是合法的,但可能程式碼中引用的表或欄位名是不存在的。
接著,Spark會在分析器(analyzer)中使用catalog倉庫對程式碼中的表和列進行解析。catalog裡存放著所有表、DataFrame資訊。如果發現表或列不存在,分析器會拒絕掉這個未解析的邏輯計劃。
如果能成功解析,那麼解析後的邏輯計劃會被傳入Catalyst 優化器。然後根據一系列的優化規則來優化邏輯計劃,最後生成的是經過優化的邏輯計劃。
物理計劃Physical Planning
當成功建立了優化的邏輯計劃後,Spark就開始了物理計劃過程。
物理計劃也被叫做一個Spark計劃,指邏輯計劃如何在叢集上通過生成不同的物理執行策略和代價比較模型來選擇最佳的執行策略。
物理執行計劃會生成一系列的RDDs和變換。(這個過程類似於編譯,把DataFrame/Datasets/SQL程式設計的變換操作編譯成RDD的變換操作。)
執行Execution
當選擇了一個物理執行計劃後,Spark就開始在RDDs上跑程式碼了。
相關文章
- spark學習筆記--叢集執行SparkSpark筆記
- Spark叢集和任務執行Spark
- 程式碼精簡執行過程
- xcall叢集執行命令指令碼指令碼
- Spark 叢集執行任務失敗的故障處理Spark
- Java 程式執行過程Java
- javascript引擎執行的過程的理解--執行階段JavaScript
- ClusterShell:一個在叢集節點上並行執行命令的好工具並行
- 線上定時指令碼執行慢,分析過程指令碼
- 程式語言執行過程
- Spark閉包 | driver & executor程式程式碼執行Spark
- 在叢集環境中執行的Spring計劃排程任務 - Stack OverflowSpring
- Hadoop-叢集執行Hadoop
- 搭建spark on yarn 叢集SparkYarn
- Zookeeper原始碼分析(四) —– 叢集模式(replicated)執行原始碼模式
- Zookeeper原始碼分析(四) ----- 叢集模式(replicated)執行原始碼模式
- 目前對程式、執行緒、協程的理解執行緒
- TiCDC 原始碼閱讀(三)TiCDC 叢集工作過程解析原始碼
- 《深入理解Spark》之Spark的整體執行流程Spark
- 從認證到排程,K8s 叢集上執行的小程式到底經歷了什麼?K8S
- 原始碼分析OKHttp的執行過程原始碼HTTP
- 淺析Java程式的執行過程Java
- Spark3.0.0叢集搭建Spark
- 今天在linux上用perl連線sqlserver,執行儲存過程,獲取一個結果集LinuxSQLServer儲存過程
- 在IntelliJ IDEA中建立和執行java/scala/spark程式IntelliJIdeaJavaSpark
- ELF PHP 可執行程式執行後載入重型指令碼的過程PHP行程指令碼
- docker下,極速搭建spark叢集(含hdfs叢集)DockerSpark
- 在VSCode上執行Python程式(Mac)VSCodePythonMac
- spark原始碼之任務提交過程Spark原始碼
- idea配置dashboard並原始碼啟動叢集執行nacosIdea原始碼
- IDEA本地執行hadoop程式成功,叢集執行找不到自定義的Mapper類IdeaHadoopAPP
- 通過 HelloWorld 瞭解 Java 程式執行過程以及執行時記憶體Java記憶體
- spark叢集的配置檔案Spark
- 在K8S中,Worker節點加入叢集的全過程?K8S
- linux 上 jenkins 通過節點服務在 windows 執行指令碼LinuxJenkinsWindows指令碼
- 指令的執行過程
- jsp的執行過程JS
- 原始碼簡析Spring-Integration執行過程原始碼Spring