天天看點

Spark實戰(七)spark streaming +kafka(Python版)

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           

繼續閱讀