Spark集群的四种模式
1、local
单机运行,一般用于测试
2、yarn
Spark客户端直接连接yarn
3、standalone
spark自带的资源调度器(默认情况下:standalone集群=spark集群)
4、Mesos
Spark客户端直接连接Mesos
运行流程:
Spark Application向资源调度器(yarn,mesos,standalone)申请资源,执行任务调度器,然后分布式运行
搭建Standalone集群
搭建的版本为1.6.3
解压压缩包;
1、配置环境变量
export SPARK_HOME=/opt/software/spark-1.6.3
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin
2、修改配置文件
#在conf目录下修改两个配置文件
#修改slaves.template,g更名为slaves,配置从节点的Ip
node02
node03
node04
#修改spark-env.sh.template更名spark-env.sh配置一下信息
#主节点的ip
SPARKM_MASTER_IP=node01
#端口号:master与work通信端口
SPARK_MASTER_PORT=7077
#每个work进程所能管理的核数(根据当前节点资源情况配置)
SPARK_WORKER_CORS=3
#每个work进程所能管理的内存
SPARK_WORKER_MEMORY=2g
#worker的工作目录
SPARK_WORKER_DIR=/opt/software/spark/worker
#每个节点上启动的work数
SPARK_WORKER_INSTANCES=1
将配置好的文件,发送到其他节点上,
#pwd表示当前目录
scp -r spark-1.6.3 root@node2:`pwd`
scp -r spark-1.6.3 root@node3:`pwd`
scp -r spark-1.6.3 root@node4:`pwd`
#启动命令和HDFS的命令冲突
mv stark-all.sh stark-spark.sh
stark-spark.sh
注意:修改spark的启动命令
3、查看监控页面 IP:端口号(8088)
4、提交Application到集群,
在bin目录下
./spark-submit --master spark://node01:7077 --class org.apache.spark.exmaples.SparkPi ../lib/spark-examples-1.6.3-hadoop2.6.0.jar 100
计算结果如下图所示:
Standalone基于zookeeper的高可用集群的搭建
主备切换机制
客户端提交一个AApplication,Master中会存储各个Worker的信息,WaitingApps、WaitingDrivers等信息。
为了防止Master发生单点故障,丢失元数据,Master会将这些信息同步至zookeeper的小型文件系统的目录中。
一旦Master挂掉,zookeeper会选取备用Master继续任务。
备用Master会去zookeeper的文件系统中拉取元数据,然后基于根据拉来的worker信息去通知worker易主,此后worker会给备用Master返回心跳。
集群的搭建
切换至/opt/software/spark/spark-1.6.3/conf/目录下,在spark集群的基础上修改spark-env.sh配置文件
#Dspark.deploy.recoveryMode=ZOOKEEPER代表Spark HA是基于zookeeper。
#Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181代表zookeeper集群在哪个节点启动zookeeper集群在哪个节点启动**
#Dspark.deploy.zookeeper.dir=/spark-1106zookeeper内部的小型文件系统的目录
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181 -Dspark.deploy.zookeeper.dir=/spark-1106"
将配置文件分别发送到其他节点上
在node02、node03、node04节点上启动zookeeper
附:搭建zookeeper
将zookeeper解压在自定义目录下
修改conf下的zoo_sample.cfg的名称,改为zoo.cf(方便修改)
mv zoo_sample.cfg zoo.cfg
#修改zo.cfg
vi zoo.cfg
#配置文件信息
dataDir=/var/zfg/zookeeper
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
在dataDir的目录下创建myid文件,在这个文件中写上当前节点id 与server后数字对应(需自己将上面的目录结构创建出来,路径可以自己自定义)。
将配置好的zookeeper安装包拷贝到node03、node04,并且各节点创建myid号,与上面各节点的数字对应。
启动zookeeper
到zookeeper/bin 目录下
分别在三个节点上启动 ./zkServer.sh start
(注:zookeeper要在集群启动前启动)
启动spark
#在node01节点上启动Spark
start-spark.sh
#在node02上启动Master
start-master.sh
查看监控页面
node01节点
node02节点
测试高可用
现将node01的Master进程kill,然后观察备用Master是否切换为ALIVE。
问题思考
1、master的主备切换过程中需要做哪些工作
备用的master先去zookeeper中下载元数据,通过worker集合中的数据向每一个worker发消息,告知主备切换了,如果waitingApps或waitingDrivers里面有数据,就开始继续工作。
2、master主备切换过程,能够提交一个新的Application到集群中运行呢?
不能,主备切换,之前正在工作的master已经不能工作了,接管过来的master现在处于RECOVER,还不能工作
3、如果有一个Application在集群中已经运行了,那么主备切换过程对这个正在运行的Application有没有影响?
没有影响,Spark是粗粒度的资源调度,任务在运行之前已经找好master申请好资源了,没有master的事了
至此spark的搭建就完成啦~