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程式碼上傳spark叢集服務並執行(基於spark官網文件)Spark
- spark學習筆記--叢集執行SparkSpark筆記
- Spark叢集和任務執行Spark
- 在多節點的叢集上執行Cassandra
- spark core原始碼分析1 叢集啟動及任務提交過程Spark原始碼
- 程式碼精簡執行過程
- Spark在Hadoop叢集上的配置(spark-1.1.0-bin-hadoop2.4)SparkHadoop
- xcall叢集執行命令指令碼指令碼
- ELK 在 Spark 叢集的應用Spark
- Spark 叢集執行任務失敗的故障處理Spark
- ClusterShell:一個在叢集節點上並行執行命令的好工具並行
- Java 程式執行過程Java
- 在oracle 叢集多例項中執行並行操作Oracle並行
- javascript引擎執行的過程的理解--執行階段JavaScript
- 程式語言執行過程
- Spark閉包 | driver & executor程式程式碼執行Spark
- 理解oracle執行sql語句的過程OracleSQL
- 搭建spark on yarn 叢集SparkYarn
- spark streaming原始碼分析3 排程及執行Spark原始碼
- Zookeeper原始碼分析(四) —– 叢集模式(replicated)執行原始碼模式
- Zookeeper原始碼分析(四) ----- 叢集模式(replicated)執行原始碼模式
- 在叢集環境中執行的Spring計劃排程任務 - Stack OverflowSpring
- TiCDC 原始碼閱讀(三)TiCDC 叢集工作過程解析原始碼
- 從認證到排程,K8s 叢集上執行的小程式到底經歷了什麼?K8S
- Hadoop-叢集執行Hadoop
- Spark3.0.0叢集搭建Spark
- 《深入理解Spark》之Spark的整體執行流程Spark
- Java程式碼編譯和執行的整個過程Java編譯
- 目前對程式、執行緒、協程的理解執行緒
- ORDER BY 在oracle中執行的大概過程Oracle
- docker下,極速搭建spark叢集(含hdfs叢集)DockerSpark
- 原始碼分析OKHttp的執行過程原始碼HTTP
- knockout原始碼分析之執行過程原始碼
- 淺析Java程式的執行過程Java
- Jstorm叢集搭建過程/Jstorm叢集一鍵安裝部署JSORM
- 今天在linux上用perl連線sqlserver,執行儲存過程,獲取一個結果集LinuxSQLServer儲存過程
- sql 執行過程SQL
- spark叢集的配置檔案Spark