spark常用的啟動方式
一、Local(本地模式)
Spark單機運作,一般用于開發測試。可以通過Local[N]來設定,其中N代表可以使用N個線程,每個線程擁有一個core。如果不指定N,則預設是1個線程(該線程有1個core)。spark-submit 和 spark-submit --master local 效果是一樣的,同理spark-shell 和 spark-shell --master local 效果是一樣的
運作該模式非常簡單,隻需要把Spark的安裝包解壓後,改一些常用的配置即可使用,而不用啟動Spark的Master、Worker守護程序,也不用啟動Hadoop的各服務(除非需要用到HDFS)
這個SparkSubmit程序既是客戶送出任務的Client程序、又是Spark的driver程式、還充當着Spark執行Task的Executor角色。
示例如下:
spark-submit --class JavaWordCount --master local[10] JavaWordCount.jar file:///tmp/test.txt
代碼中設定:
spark = SparkSession\
.builder\
.appName("PythonWordCount")\
.master("local")\
.getOrCreate()
sc = spark.sparkContext
parsed =urllib.parse.urlparse("http://www.baidu.com")
print(parsed.netloc)
spark-submit --master local[2] 代表會有2個線程(每個線程一個core)來并發執行應用程式。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
本地僞叢集運作模式:
spark-submit --master local-cluster[2, 3, 1024]
上面這條指令代表會使用2個executor程序,每個程序配置設定3個core和1G的記憶體,來運作應用程式。SparkSubmit依然充當全能角色,又是Client程序,又是driver程式,還有點資源管理的作用。生成的兩個CoarseGrainedExecutorBackend,就是用來并發執行程式的程序。
二、Standalone模式
1.Spark自帶Cluster Manager的Standalone Client模式:
建構一個由Master+Slave構成的Spark叢集,Spark運作在叢集中。和單機運作的模式不同,這裡必須在執行應用程式前,先啟動Spark的Master和Worker守護程序。這種運作模式,可以使用Spark的8080 來觀察資源和應用程式的執行情況了。
啟動示例如下:
spark-submit --master spark://mini1:7077或者 spark-submit --master spark://mini1:7077 --deploy-mode client
spark = SparkSession\
.builder\
.appName("PythonWordCount")\
.master("spark://mini1:7077")\
.getOrCreate()
sc = spark.sparkContext
2.spark自帶cluster manager的standalone cluster模式(叢集):
spark-submit --master spark://mini1:6066 --deploy-mode cluster
用戶端的SparkSubmit程序會在應用程式送出給叢集之後就退出,同時Master會在叢集中選擇一個Worker程序生成一個子程序DriverWrapper來啟動driver程式,而該DriverWrapper 程序會占用Worker程序的一個core,是以同樣的資源下配置下,會比第3種運作模式,少用1個core來參與計算。
三、Spark on Yarn模式
1.基于YARN的Resource Manager的Client模式(叢集)
Spark用戶端直接連接配接Yarn。不需要額外建構Spark叢集。現在越來越多的場景,都是Spark跑在Hadoop叢集中,是以為了做到資源能夠均衡排程,會使用YARN來做為Spark的Cluster Manager,來為Spark的應用程式配置設定資源。
按照Spark應用程式中的driver分布方式不同,Spark on YARN有兩種模式: yarn-client模式、yarn-cluster模式。當在YARN上運作Spark作業,每個Spark executor作為一個YARN容器運作。Spark可以使得多個Tasks在同一個容器裡面運作。
使用如下指令執行應用程式:
spark-submit --master yarn
或者 spark-submit --master yarn --deploy-mode client
在Resource Manager節點上送出應用程式,會生成SparkSubmit程序,該程序會執行driver程式。
RM會在叢集中的某個NodeManager上,啟動一個ExecutorLauncher程序,來做為ApplicationMaster。另外,也會在多個NodeManager上生成CoarseGrainedExecutorBackend程序來并發的執行應用程式。
2.基于YARN的Resource Manager的Custer模式(叢集)
spark-submit --master yarn --deploy-mode cluster
conf = SparkConf()
conf.setAppName("Spark")
conf.setMaster('yarn') # spark standalone
conf.set('spark.executor.instances', 3) # cluster on yarn
conf.set('spark.executor.memory', '1g')
conf.set('spark.executor.cores', '1')
# conf.set('spark.cores.max', '2')
# conf.set('spark.logConf', True)
conf.set('spark.streaming.blockInterval', 1000*4) # restart receiver interval
sc = SparkContext(conf = conf)
四、Spark on Mesos模式
./spark-shell --master mesos://host:port
./spark-shell --master mesos://host:port --deploy-mode client
./spark-shell --master mesos://host:port --deploy-mode cluster