一、安裝省略,由於如今基本上都用大數據集成平臺: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
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
無論是什麼腳本,只要是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方法,很長)
一、--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等參數