大数据Spark03_集群环境搭建及任务提交的方式
Spark四种部署方式
Spark应用程序在集群上部署运行时,可以由不同的组件为其提供资源管理调度服务(资源包括CPU、内存等)。比如,可以使用自带的独立集群管理器(standalone),或者使用YARN,也可以使用Mesos。因此,Spark包括三种不同类型的集群部署方式,包括standalone、Spark on Mesos和Spark on YARN。
1.Local模式:此模式适合在开发工具中进行测试。
2.standalone模式
与MapReduce1.0框架类似,Spark框架本身也自带了完整的资源调度管理服务,可以独立部署到一个集群中,而不需要依赖其他系统来为其提供资源管理调度服务。在架构的设计上,Spark与MapReduce1.0完全一致,都是由一个Master和若干个Slave构成,并且以槽(slot)作为资源分配单位。不同的是,Spark中的槽不再像MapReduce1.0那样分为Map 槽和Reduce槽,而是只设计了统一的一种槽提供给各种任务来使用。3.Spark on Mesos模式
Mesos是一种资源调度管理框架,可以为运行在它上面的Spark提供服务。Spark on Mesos模式中,Spark程序所需要的各种资源,都由Mesos负责调度。由于Mesos和Spark存在一定的血缘关系,因此,Spark这个框架在进行设计开发的时候,就充分考虑到了对Mesos的充分支持,因此,相对而言,Spark运行在Mesos上,要比运行在YARN上更加灵活、自然。目前,Spark官方推荐采用这种模式,所以,许多公司在实际应用中也采用该模式。
4. Spark on YARN模式
Spark可运行于YARN之上,与Hadoop进行统一部署,即“Spark on YARN”,其架构如图9-13所示,资源管理和调度依赖YARN,分布式存储则依赖HDFS。
一、Local 模式搭建
Local模式也就是说不是分布式模式,我们只需要在一台机器上就可以搭建。其实它可以运行在其他不同的多种模式 比如下面的Standalone、Yarn、Mesos等模式。
将下载好的tgz包移动weekend13节点的/usr/local目录下 重命名conf目录下的log4j.properties.template为log4j.properties然后修改其日志级别为WARN这样启动spark shell的时候输出的日志信息就会少些。
log4j.rootCategory=INFO, console
log4j.rootCategory=WARN, console
在Sparks hell中SparkContext对象自动的创建并命名了为sc ,一旦有了sc我们就通过sc创建RDD。
后续的所有基于RDD的操作都可以执行。
启动成功后可通过 ipaddress:4040 访问SparkUI界面 查看任务和集群的信息。
最后,可以使用命令“:quit”退出Spark Shell,如下所示:
二、Standalone集群搭建
在节点weekend10、weekend11、weekend12、weekend13上搭建Spark standalone集群
将下载好的tgz包移动到各节点的/usr/local目录下
进入conf目录下重命名 slaves.template 为slaves 、spark-env.sh.template 为 spark-env.sh
vi slaves :添加从节点(worker节点)weekend11、weekend12
vi spark-env.sh :
Note:主节点是weekend10 ,从节点weekend11、weekend12
将weekend10节点上配置好的spark-1.6.0复制到weekend11、weekend12节点上
在节点weekend10的sbin目录下执行命令:
./start-all.sh
查看节点进程
查看Web界面:weekend10:8080
修改端口的方式
vi start-master.sh
提交任务测试
进入spark的bin目录下 执行lib包中的例子
执行命令:
./spark-submit --master spark://weekend10:7077 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
在节点weekend13上搭建Driver客户端
将weekend10节点上的spark复制到weekend13节点上 然后删除 conf下的slaves 再将spark-env.sh配置中的修改内容注释掉。
进入spark bin目录下再次执行命令:
./spark-submit --master spark://weekend10:7077 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
三、使用开发工具书写spark程序进行测试
开发工具有ScalaIDE、eclipse、IDEA等,包的管理工具可以使用Maven。
1、初始化SparkContext
val conf=new SparkConf()
conf.setMaster("local").setAppName("My App")
val sc=new SparkContext(conf)
初始化SparkContext的时候需要传入两个参数:
A Cluster URL:设置为Local 表示运行spark是在本地机器的一个线程中不需要连接到集群中。
An Application name:在集群的管理界面中可以显示程序的名称。
2、基于SparkCOntext创建RDD
3、基于RDD执行一系列的转换和行动算子
4、程序结束使用 sc.stop()关闭spark
四、Spark独立应用程序编程、打包、提交运行
使用 Scala 编写的程序需要使用 sbt 进行编译打包,相应的,Java 程序使用 Maven 编译打包,而 Python 程序通过 spark-submit 直接提交
Spark任务提交的方式
Standalone Client 提交任务
Standalone Cluster 提交任务
Yarn Cluster 提交任务
Yarn Client 提交任务
Yarn模式两种提交任务方式
1. yarn-client提交任务方式
提交命令
./spark-submit --master yarn --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100 |
或者
./spark-submit --master yarn–client --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100 |
或者
./spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100 |
执行原理图解
执行流程
1. 客户端提交一个Application,在客户端启动一个Driver进程。
2. 应用程序启动后会向RS(ResourceManager)发送请求,启动AM(ApplicationMaster)的资源。
3. RS收到请求,随机选择一台NM(NodeManager)启动AM。这里的NM相当于Standalone中的Worker节点。
4. AM启动后,会向RS请求一批container资源,用于启动Executor.
5. RS会找到一批NM返回给AM,用于启动Executor。
6. AM会向NM发送命令启动Executor。
7. Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端。
总结
Yarn-client模式同样是适用于测试,因为Driver运行在本地,Driver会与yarn集群中的Executor进行大量的通信,会造成客户机网卡流量的大量增加.
ApplicationMaster的作用:
1. 为当前的Application申请资源
2. 给NameNode发送消息启动Executor。
注意:ApplicationMaster有launchExecutor和申请资源的功能,并没有作业调度的功能。
2、yarn-cluster提交任务方式
提交命令
./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100 |
或者
./spark-submit --master yarn-cluster --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 100 |
执行原理图解
执行流程
1. 客户机提交Application应用程序,发送请求到RS(ResourceManager),请求启动AM(ApplicationMaster)。
2. RS收到请求后随机在一台NM(NodeManager)上启动AM(相当于Driver端)。
3. AM启动,AM发送请求到RS,请求一批container用于启动Excutor。
4. RS返回一批NM节点给AM。
5. AM连接到NM,发送请求到NM启动Excutor。
6. Excutor反向注册到AM所在的节点的Driver。Driver发送task到Excutor。
总结
Yarn-Cluster主要用于生产环境中,因为Driver运行在Yarn集群中某一台nodeManager中,每次提交任务的Driver所在的机器都是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务提交后不能看到日志。只能通过yarn查看日志。
ApplicationMaster的作用:
1. 为当前的Application申请资源
2. 给NameNode发送消息启动Excutor。
3. 任务调度。
停止集群任务命令:yarn application -kill applicationID