集群规划:
主机名
IP
安装的软件
运行的进程
win4
192.168.2.104
jdk1.8、spark2.2.1、zookeeper3.4.11
Worker、QuorumPeerMain
win5
192.168.2.105
jdk1.8、spark2.2.1、zookeeper3.4.11
Worker、QuorumPeerMain
win6
192.168.2.106
jdk1.8、spark2.2.1、zookeeper3.4.11
Worker、QuorumPeerMain
win7
192.168.2.107
jdk1.8、spark2.2.1
Master
win8 192.168.2.108jdk1.8、spark2.2.1 Master
说明:
spark2.2.1中通常由两个Master组成,一个处于ALIVE状态,另一个处于STANDBY状态。ALIVE Master对外提供服务,
而STANDBY Master则不对外提供服务,仅同步ALIVE Master的状态,以便能够在它失败时快速进行切换。
安装步骤:
1.安装配置zooekeeper集群(在win4上)
1.1解压
tar -zxvf zookeeper-3.4.11.tar.gz -C /home/luguoqi/app/
1.2修改配置
cd /home/luguoqi/app/zookeeper-3.4.11/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/home/luguoqi/app/zookeeper-3.4.11/tmp
在最后添加:(第一个关口是leader与flower通信端口,第二个是选举端口,默认端口2181)
server.1=win4:2888:3888
server.2=win5:2888:3888
server.3=win6:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir /home/luguoqi/app/zookeeper-3.4.11/tmp
再创建一个空文件
touch /home/luguoqi/app/zookeeper-3.4.11/tmp/myid
最后向该文件写入ID
echo 1 > /weekend/zookeeper-3.4.11/tmp/myid
1.3将配置好的zookeeper拷贝到其他节点(首先分别在win5、win6的luguoqi用户下创建app文件夹:mkdir /home/luguoqi/app)
scp -r /home/luguoqi/app/zookeeper-3.4.11/ win5:/home/luguoqi/app/
scp -r /home/luguoqi/app/zookeeper-3.4.11/ win6:/home/luguoqi/app/
注意:修改win5、win6对应/weekend/zookeeper-3.4.11/tmp/myid内容
win5:
echo 2 > /home/luguoqi/app/zookeeper-3.4.11/tmp/myid
win6:
echo 3 > /home/luguoqi/app/zookeeper-3.4.11/tmp/myid
2.安装配置spark集群(在win4上操作)
2.1解压
tar -zxvf spark-2.2.1-bin-hadoop2.7.tgz -C /home/luguoqi/app/
2.2配置spark(spark2.2.1所有的配置文件都在$SPARK_HOME/conf目录下)
#将spark添加到环境变量中
vim /etc/profile
export JAVA_HOME=/home/luguoqi/app/jdk1.8.0_151
export SPARK_HOME=/home/luguoqi/app/spark-2.2.1-bin-hadoop2.7
export PATH=$PATH:$JAVA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
cd /home/luguoqi/app/spark-2.2.1-bin-hadoop2.7/conf
2.2.1修改slaves(mv slaves.template slaves)文件
win4
win5
win6
export JAVA_HOME=/home/luguoqi/app/jdk1.8.0_151
2.2.2修改spark-env.sh(mv spark-env.sh.template spark-env.sh)文件
export JAVA_HOME=/home/luguoqi/app/jdk1.8.0_151
#export SPARK_MASTER_HOST=win8 非ha配置
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=win4,win5,win6 -Dspark.deploy.zookeeper.dir=/spark"
2.2.3配置免密码登陆
#我这里配置了所有主机上的免密登录(事实上只需要配置win8->win4、win5、win6。win7->win4、win5、win6免密即可)
#在win8上生产一对钥匙
ssh-keygen -t rsa
#将公钥拷贝到其他节点,包括自己
ssh-coyp-id win4
ssh-coyp-id win5
ssh-coyp-id win6
2.4将配置好的spark拷贝到其他节点
scp -r /home/luguoqi/app/spark-2.2.1-bin-hadoop2.7 win5:$PWD
scp -r /home/luguoqi/app/spark-2.2.1-bin-hadoop2.7 win6:$PWD
scp -r /home/luguoqi/app/spark-2.2.1-bin-hadoop2.7 win7:$PWD
scp -r /home/luguoqi/app/spark-2.2.1-bin-hadoop2.7 win8:$PWD
2.5启动zookeeper集群(分别在win4、win5、win6上启动zk)
cd /home/luguoqi/app/zookeeper-3.4.11/bin
./zkServer.sh start
#查看状态:一个leader,两个follower
./zkServer.sh status
2.6启动spark集群(在win7上执行)
cd /home/app/spark-2.2.1-bin-hadoop2.7/sbin
./start-all.sh
####此时只启动了一个Master(win7)和三个Worker(win4、win5、win6)
启动另一个Master(win8上执行)
cd /home/app/spark-2.2.1-bin-hadoop2.7/sbin
./start-master.sh
到此,spark集群配置完毕,可以统计浏览器访问:
http://192.168.2.107:8080
Spark Master at spark://win7:7077(Status: ALIVE)
http://192.168.2.108:8080
Spark Master at spark://win8:7077(Status: STANDBY)
验证SPARK HA
此时可以使用spqrk-shell客户端连接spark集群
(任意一台主机上执行)
cd /home/app/spark-2.2.1-bin-hadoop2.7/bin
./spark-shell --master spark://win7:7077,win8:7077
或者提交jar包执行测试
./spark-submit --master spark://win7:7077,win8:7077 --executor-memory 512mb --total-executor-cores 4 --class com.win.SaprkWordCount /home/luguoqi/spark-1.0.jar hdfs://win1:9000/wc/input hdfs://win1:9000/wc/output
提交任务
指定Master(多个使用,分割)
每个Worker上使用的内存
每个Worker使用的核数
指定main类
jar包
数据输入目录
输出目录
连接成功,说明集群已经配置完毕。
此时可以测试高可用状态:
在win7(Status: ALIVE)上执行kill -9 pid
然后,在页面查看,发现win8状态已经切换为ALIVE。