1:单节点集群部署
准备三台服务器,配置好对应主机的网络IP、主机名称、关闭防火墙、
122、121、120
主机名 | master | slaves |
cdh101 | √ | √ |
cdh102 | √ | |
cdh103 | √ |
用于Worker的Web UI | 8080、8081、2181 | 用于Worker的Web UI |
应用程序(Driver和Executor)使用的端口 | 5050、4040 | 用于Executor的启动和Driver的回调。 |
外部服务使用的端口(如Spark History Server | 18080 | 用于Spark History Server的Web UI |
主节点(Master)使用的端口 | 7077 | 用于Spark master的Web UI和客户端连接。 |
1.1:基础环境准备
1.1.1:配置host
#会直接修改hostname里面的名字,并且不需要重启
hostnamectl set-hostname cdh101
vim /etc/hosts
192.168.33.122 cdh101
192.168.33.121 cdh102
192.168.33.120 cdh103
#重启网卡,立即生效
sudo /etc/init.d/network restart
1.1.2:配置selinux
#关闭防火墙(生产暂不关闭)
systemctl stop firewalld systemctl disable firewalld
#关闭selinux
vim /etc/selinux/config SELINUX=disabled
1.1.3:ssh免密登录(cdh101节点)
#配置cdh101对cdh101、cdh102、cdh103免密登录
ssh-keygen -t rsa
ssh-copy-id cdh101
ssh-copy-id cdh102
ssh-copy-id cdh103
1.1.4:安装jdk(所有节点)
#将jdk包scp到 剩余节点,分别进行安装jdk
scp -r jdk-8u144-linux-x64.tar.gz cdh102:
scp -r jdk-8u144-linux-x64.tar.gz cdh103:
mkdir -p /usr/java
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/java/
vi /etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile jps
1.2:下载安装包
https://archive.apache.org/dist/spark/spark-2.3.1/
1.3:传包、解压、安装
[root@cdh101 ~]# mkdir -p /opt/spark-ha
[root@cdh101 ~]# tar -zxvf spark-2.3.1-bin-hadoop2.7.tgz -C /opt/spark-ha
1.4:配置环境变量
[root@cdh101 spark-2.3.1-bin-hadoop2.7]# vim /etc/profile
#追加参数 #spark_standalone
export SPARK_HOME=/opt/spark-ha/spark-2.3.1-bin-hadoop2.7 #生效环境变量
1.5:修改配置文件
[root@cdh101 spark-2.3.1-bin-hadoop2.7]# cd conf/
#复制spark-env.sh.template文件并改名,防止修改错误。
[root@cdh101 conf]# cp spark-env.sh.template spark-env.sh
#编辑spark-env.sh文件增加以下配置(vim spark-env.sh)
export SPARK_MASTER_IP=cdh101
#spark集群主节点
export SPARK_MASTER_PORT=7077 #spark集群主节点对应的端口号
export JAVA_HOME=/usr/java/jdk1.8.0_144 #jdk路径
#export SPARK_WORKER_CORES=2 #核数,2个核可以同时执行2个task任务
#export SPARK_WORKER_INSTANCES=1 #每个节点的worker进程
#export SPARK_WORKER_MEMORY=2g #分配的内存
#进入解压缩后路径的conf目录,修改slaves.template文件名为slaves
[root@cdh101 conf]# mv slaves slaves.template
#配置集群host cdh101为主节点
[root@cdh101 conf]# vim slaves cdh101 cdh102 cdh103
1.6:分发安装包
#从节点创建目录
[root@cdh103 ~]# mkdir /opt/spark-ha
[root@cdh102 ~]# mkdir /opt/spark-ha
#创建分发脚本
#!/bin/bash
if [[ $# -lt 1 ]] ;then
echo no params;
exit;
fi
p=$1
dir=`dirname $p`
filename=`basename $p`
cd $dir
fullpath=`pwd -P .`
user=`root`
echo user = $user
echo fullpath = $fullpath
echo filename = $filename
echo dir = $dir
echo p = $p
for((i=2;i<=3;i=$i+1));do
echo ==========Slave$i==========
#rsync -lr $p ${user}@cdh10$i:$fullpath
scp -r $p ${user}@cdh10$i:$fullpath
done;
#分发安装包
[root@cdh101 spark-ha]# sh xsync.sh spark-2.3.1-bin-hadoop2.7
1.7:启动集群
#启动集群
[root@cdh101 spark-2.3.1-bin-hadoop2.7]# ./sbin/start-all.sh
#停止集群 [root@cdh101 spark-2.3.1-bin-hadoop2.7]# ./sbin/stop-all.sh
2:HA集群部署
所谓的高可用是因为当前集群中的Master节点只有一个,所以会存在单点故障问题。所以为了解决单点故障问题,需要在集群中配置多个Master节点,一旦处于活动状态的Master发生故障时,由备用Master提供服务,保证作业可以继续执行。这里的高可用一般采用Zookeeper 设置
主机名 | master | slave1 | slave2 |
部署应用 | master,zk,worker | master,zk,worker | zk,worker |
2.1:下载安装包
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/
2.2:传包、解压、安装
[root@cdh101 ~]# tar -zxvf zookeeper-3.4.12.tar.gz -C /opt/spark-ha/
#目录下创建zkData目录
[root@cdh101 zookeeper-3.4.12]# mkdir zkData
#zkData目录下创建一个myid的文件,在文件中添加与server对应的编号1
[root@cdh101 zookeeper-3.4.12]# cd zkData/ [root@cdh101 zkData]# vim myid
2.3:配置zoo.cfg文件
[root@cdh101 conf]# cp zoo_sample.cfg zoo.cfg #修改数据存储路径配置,增加集群配置 [root@cdh101 conf]# vim zoo.cfg server.1=cdh101:2888:3888 server.2=cdh102:2888:3888 server.3=cdh103:2888:3888
2.4:分发安装包
[root@cdh101 spark-ha]# sh xsync.sh zookeeper-3.4.12/
#分别修改node2、node3在/opt/spark-ha/zookeeper-3.4.12/zkData/myid文件中内容为2、3 [root@cdh102 zookeeper-3.4.12]# vim /opt/spark-ha/zookeeper-3.4.12/zkData/myid [root@cdh103 zookeeper-3.4.12]# vim /opt/spark-ha/zookeeper-3.4.12/zkData/myid
2.5:zk常用命令
#三台服务器分别启动zookeeper
[root@cdh101 zookeeper-3.4.12]# bin/zkServer.sh start #三台服务器分别查看zk状态 [root@cdh101 zookeeper-3.4.12]# bin/zkServer.sh status #三台服务器分别停止zk状态 [root@cdh101 zookeeper-3.4.12]# bin/zkServer.sh stop
2.6:修改配置文件
2.6.1:修改 spark-env.sh 文件添加如下配置
# 注释掉如下内容: #SPARK_MASTER_HOST=cdh101 #SPARK_MASTER_PORT=7077
# 添加上如下内容:
SPARK_MASTER_WEBUI_PORT=8989
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=cdh101:2181,cdh102:2181,cdh103:2181 -Dspark.deploy.zookeeper.dir=/spark"
[root@cdh101 spark-ha]# sh xsync.sh /opt/spark-ha/spark-2.3.1-bin-hadoop2.7/conf/
2.7:启动集群
#启动zk集群
[root@cdh101 zookeeper-3.4.12]# ./bin/zkServer.sh start
[root@cdh102 zookeeper-3.4.12]# ./bin/zkServer.sh start
[root@cdh103 zookeeper-3.4.12]# ./bin/zkServer.sh start
#启动spark集群
[root@cdh101 spark-2.3.1-bin-hadoop2.7]# ./sbin/start-all.sh
#
[root@cdh101 spark-2.3.1-bin-hadoop2.7]# ./sbin/start-history-server.sh
2.8:测试集群
bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://192.168.33.122:7077 ./examples/jars/spark-examples_2.11-2.3.1.jar 10