一、spark-submit腳本的使用及理解

1、介紹

  • 一、安裝省略,由於如今基本上都用大數據集成平臺:cdh,hdp等java

  • 二、spark-submit腳本是spark提供的一個用於提交任務的腳本,經過它的--master 參數能夠很方便的將任務提交到對應的平臺去執行,好比yarn、standalone、mesos等。mysql

  • 三、spark-submit會在提交任務時,把集羣大部分的配置文件都打包在__spark_conf__.zip中,包括core-site.xml、hdfs-site.xml、yarn-site.xml、mapreduce-site.xml、hbase-site.xml、hive-site.xml等。而後將其和工程依賴的第三方jar(flume、kafka、以及com.apache.org.lang3等)一同發送到spark的資源存放目錄下,默認是:/user/root/.sparkStaging/xxxId/。sql

  • 四、上述的__spark_conf__.zip還包含一個重要的配置文件__spark_conf__.properties,裏面包含着spark-submit腳本的啓動參數apache

    在main類中SparkConf conf = new SparkConf();時會加載這個配置文件,因此再也不須要執行conf.setMaster("yarn");app

    如圖:ide

  • 五、有了上面配置文件和jar,就能夠很方便的訪問工具

    hive(hiveContext)大數據

    hbase(Configuration conf = HBaseConfiguration.create())url

    hdfs等組件spa

2、submit-submit參數說明

spark-submit \
	--master yarn \              		運行的模式
    --deploy-mode cluster \
    --name spark-test \          		在yarn界面看到的名字,若是不設置,那就是下面--class的值
	--driver-memory 1g \         		driver的內存
	--executor-memory 1g \       		每個executor的內存
	--executor-cores 1 \         		executor數量
    --jars xxx.jar, xxx.jar, xxx.jar    第三方jar,好比hbase,flume、apache的一些工具jar
	--conf mysql.url=jdbc:mysql://localhost:3306/hive?xxxx \   只能設置spark內定的參數(這個無效)
	--files /conf.properties \       	發送到集羣的配置文件,能夠直接new fileInputstream("conf.properties")來獲取
	--class com.bigdata.spark.core.SparkRunTest \     主類
	/study-spark-core-4.0.0.jar \    	本身工程的jar
	10

3、spark-submit提交任務的流程

無論是什麼腳本,只要是java寫的工程,他的啓動腳本最終都會調用某個類,而後在經過這個類來啓動工程,或者提交任務到集羣再起動,spark-submit也是一樣的道理,他的流程以下:

/usr/bin/spark-submit

==> /appslog/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/spark/bin/spark-submit

==> 執行spark-core-XXx.jar裏面的 org.apache.spark.deploy.SparkSubmit (進程的形式)

==> 直接執行org.apache.spark.deploy.SparkSubmit$.main(args) (普通方法的形式)

==> 經過--master參數值來判斷到底調用那個類來提交到對應的集羣,對應以下

--master yarn  	 	==>	org.apache.spark.deploy.yarn.Client
--master spark://XX ==>	org.apache.spark.deploy.Client
--master mesos 	==>	org.apache.spark.deploy.rest.RestSubmissionClient
--master local

流程查看:

  • 一、sh -x /usr/bin/spark-submit 裏面會有一句

  • 二、sh -x /opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/bin/../lib/spark/bin/spark-submit

  • 三、進入ide查看org.apache.spark.deploy.SparkSubmit源碼(main方法,很長)

4、總結

  • 一、--files發送過來的文件,能夠直接讀取,不須要路徑。好比上述將配置文件發送到.sparkStaging/XXXID/下,能夠直接經過以下方式獲取,這樣參數就不須要再spark-submit最後那裏一個個繁瑣的添加進去

    Properties pros = new Properties();
      pros.load(new FileInputStream("conf.properties"));
  • 二、--jars 和 --files後面都不能是文件夾,須要將全部的jar的絕對路勁,經過「逗號」拼接,可是開頭不能是逗號,優先發送--jars的jar,若是系統的jar有衝突,那麼不會再發送,也就是以用戶lib文件夾下的爲準

  • 三、new SparkConf()時會加載__spark_conf__.properties,因此不須要再設置master、depoly-mode等參數

相關文章
相關標籤/搜索