在Spark中支持4种运行模式:
1.Local:通常在开发时使用,可以直接在IDEA中运行,本机电脑不用部署环境。--master("local[2]")。
2.Standalone:这是Spark自带的,如果一个集群是Standalone,需要在多台机器上同时部署Spark环境。改一个机器的配置要把所有机器都同步一下。
3.YARN:生成上常使用。统一使用YARN进行整个集群作业(MR,Spark)的资源调度。只需要在一台机器上部署Spark,在该机器上提交作业,只需要修改该机器的Spark配置。(所以只需要部署YARN集群就行了,通常部署Hadoop的时候就部署了YARN集群)
不管使用什么模式,Spark应用程序的代码是一样的,只需要在提交作业的时候通过--master参数来指定运行的模式即可。
yarn可以使用--deploy-mode来设置使用client或者cluster模式。cluster的地址会根据HADOOP_CONF_DIR或者YARN_CONF_DIR的配置来寻找。
对于YARN来说Spark应用程序仅仅是一个客户端而已。
client模式:Driver运行在client端(部署Spark并且提交作业的那台机器)。Driver跑在client端,它申请到资源以后还要作业分发到集群上运行(client会和请求到的Container进行通行来完成作业的调度和执行),client(部署Spark并且提交作业的那台机器)和集群之间的联系是不能断开的,client不能退出的。日志信息会在控制台输出,便于测试。
cluster:Driver运行在Application Master中。只要把作业提交后,client就可以关掉,作业已经在YARN上运行了,没有任何影响。日志在终端看不到,因为日志信息输出在Driver上,只能通过yarn logs -applicationId application_id来查看日志。
提交作业到YARN上运行的方式:
启动zookeeper
cd /app/zookeeper/bin
./zkServer.sh start
启动hadoop
cd /app/hadoop/hadoop-2.9.0/sbin
./start-all.sh
查看是否启动好了yarn集群
jps
设置HADOOP_CONF_DIR或者YARN_CONF_DIR
cd /app/spark/spark-2.2.0-bin-2.9.0/conf
vi spark-env.sh
HADOOP_CONF_DIR=/app/hadoop/hadoop-2.9.0/etc/hadoop
提交作业到YARN上
cd /app/spark/spark-2.2.0-bin-2.9.0
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --executor-memory 1G --num-executors 2 /app/spark/spark-2.2.0-bin-2.9.0/examples/jars/spark-examples_2.11-2.2.0.jar 10
--master yarn就是client模式,如果是cluster模式用 yarn-cluster