一、安装省略,由于如今基本上都用大数据集成平台: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等参数