一、應用入口:SparkContext
Spark Application 程序入口為:SparkContext,任何一個應用首先需要構建 SparkContext 對象,如下兩步構建:
- 第一步、創建 SparkConf 對象
- 設置 Spark Application 基本信息,比如應用的名稱 AppName 和應用運行 Master
- 第二步、基于 SparkConf 對象,創建 SparkContext 對象
# Import SparkConf class into program
from pyspark import SparkConf
# Import SparkContext and SparkSession classes
from pyspark import SparkContext # Spark
from pyspark.sql import SparkSession # Spark SQLif __name__=="__main__":# local[*]: run Spark in local mode with as many working processors as logical cores on your machine# If we want Spark to run locally with 'k' worker threads, we can specify as "local[k]".master = "local[*]"# The `appName` field is a name to be shown on the Spark cluster UI pageapp_name = "RDD-basics"# Setup configuration parameters for Sparkspark_conf = SparkConf().setMaster(master).setAppName(app_name)# Method 2: Getting or instantiating a SparkContextsc = SparkContext.getOrCreate(spark_conf)sc.setLogLevel('ERROR')data_list = [1, 2, 3, 3]rdd = sc.parallelize(data_list)print(rdd.collect())
二、spark實現wordCount程序的流程圖
三、Spark集群角色
當spark application運行在集群上時,主要有四個部分組成,如下圖所示:
1)、Master (被yarn中的 ResourceManager 代替):集群大管家,整個集群的資源管理和分配
2)、Worker (被yarn中的 NodeManager 代替):單個機器的管家,負責在單個服務器上提供運行容器,管理當前機器的資源.
3)、Driver:單個 Spark 任務的管理者,管理 Executor 的任務執行和任務分解分配,類似 YARN 的 ApplicationMaster;
4)、Executor:具體干活的進程,Spark 的工作任務 (Task) 都由 Executor 來負責執行.
【注意】:
只有干活的代碼是excutor運行的,其余剩下的都是由driver運行的。
四、分布式代碼執行分析
對應的流程如圖:
代碼從Driver開始,到Driver結束,中間是excutor分布式運行。
寫的是一份代碼,但是底層執行的是好多個excutor(機器)
五、Python on Spark執行原理
driver由JVM driver運行(翻譯),excutor由python excutor運行。
- Driver翻譯過去
- Excutor中轉調度。