Spark實戰(八)spark的幾種啟動方式


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]
  • 1

   上面這條命令代表會使用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.spark自帶cluster manager的standalone cluster模式(集群):

   示例如下:

spark-submit --master spark://mini1:6066 --deploy-mode cluster
  • 1

   客戶端的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
  • 1
  • 2

   在Resource Manager節點上提交應用程序,會生成SparkSubmit進程,該進程會執行driver程序。
   RM會在集群中的某個NodeManager上,啟動一個ExecutorLauncher進程,來做為ApplicationMaster。另外,也會在多個NodeManager上生成CoarseGrainedExecutorBackend進程來並發的執行應用程序。

2.基於YARN的Resource Manager的Custer模式(集群)

   使用如下命令執行應用程序:

spark-submit --master yarn --deploy-mode cluster
  • 1

   在Resource Manager端提交應用程序,會生成SparkSubmit進程,該進程只用來做Client端,應用程序提交給集群后,就會刪除該進程。
   Resource Manager在集群中的某個NodeManager上運行ApplicationMaster,該AM同時會執行driver程序。緊接着,會在各NodeManager上運行
   應用程序的結果,會在執行driver程序的節點的stdout中輸出,而不是打印在屏幕上。

 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

四、Spark on Mesos模式

   Spark客戶端直接連接Mesos。不需要額外構建Spark集群。
   啟動示例如下

./spark-shell --master mesos://host:port
./spark-shell --master mesos://host:port --deploy-mode client
./spark-shell --master mesos://host:port --deploy-mode cluster


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM