本文参考至Fate集群部署下的hadoop+spark集群部署指南, 仅记录本人部署过程中的操作历程。
一、系统准备
【1】、集群规划(此后IP配置全部用主机名代替)
节点名称 | 主机名 | IP地址 | IP地址简称 | 虚拟机OS |
---|---|---|---|---|
Master | VM-0-1-centos | 192.168.26.128 | 128 | CentOS 7.2 |
Slave1 | VM-0-2-centos | 192.168.26.129 | 129 | CentOS 7.2 |
Slave2 | VM-0-3-centos | 192.168.26.130 | 130 | CentOS 7.2 |
【2】、基础环境配置
1、 hostname配置
1)修改主机名(主机名中不能出现下划线)
在 128 root 用户下执行:
hostnamectl set-hostname VM-0-1-centos
在 129 root 用户下执行:
hostnamectl set-hostname VM-0-2-centos
在 130 root用户下执行:
hostnamectl set-hostname VM-0-3-centos
2)加入主机映射
在目标服务器(128、 129、 130)root 用户下执行:
vim /etc/hosts
192.168.26.128 VM-0-1-centos
192.168.26.129 VM-0-2-centos
192.168.26.130 VM-0-3-centos
2、 关闭SELinux
安全增强型Linux(SELinux)是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制。
在目标服务器(128、129、 130)root 用户下执行:
sed -i '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config
setenforce 0
3、 修改Linux最大打开文件数
在目标服务器(128、129、130)root 用户下执行:
vim /etc/security/limits.conf
# soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错
* soft nofile 65536 # 任何用户可以打开的最大的文件描述符数量
* hard nofile 65536
4、关闭防火墙
在目标服务器(128、129、130)root 用户下执行
systemctl disable firewalld.service
systemctl stop firewalld.service
systemctl status firewalld.service
5、初始化服务器
1)初始化服务器
在目标服务器(128、129 、130)root 用户下执行
groupadd -g 6000 apps # -g:指定新建工作组的 id
# useradd
# -s<shell> 指定用户登入后所使用的shell
# -G<群组> 指定用户所属的附加群组
# -m 自动建立用户的登入目录
useradd -s /bin/bash -G apps -m app
passwd app # 更改使用者的密码
mkdir -p /data/projects/common/jdk # -p 确保目录名称存在,不存在的就建一个
# chown 设置文件所有者和文件关联组的命令
# -R : 处理指定目录以及其子目录下的所有文件
chown –R app:apps /data/projects
2)配置sudo
在目标服务器(128、129、130)root 用户下执行
vim /etc/sudoers.d/app
# 第一个ALL:表示来源地,即从哪执行这条命令。ALL表示所有计算机
# 第二个ALL:表示app可以切换到什么用户。ALL表示所有用户
# 第三个ALL:表示app可以切换到哪些组下的用户。ALL表示所有组
app ALL=(ALL) ALL
app ALL=(ALL) NOPASSWD: ALL # NOPASSWD:ALL表示执行任意命令都不需要密码
Defaults !env_reset
3)配置ssh免密登录(三个root 和 三个app账户 )
本人采用的方法是在A虚拟机 root 账户下生成 公私钥对,并将公钥添加到授权文件,然后复制虚拟机A ,生成虚拟机B 和 虚拟机 C ,此时三台虚拟机root账户因为公私钥对和 授权文件相同,可互相免密登录;
各虚拟机的 app 用户也免密登录:需要将root的 公私钥对 和 授权文件 拷贝至app用户下,然后更改.ssh文件的所有者信息,这样 三个 root 账户 和 三个app账户就可互相免密登录
具体执行过程参照文章:设置虚拟机固定IP以及免密登录
【3】、安装包准备
1、上传以下程序包到服务器上
- jdk-1.8-linux-x64.tar.gz
- hadoop-2.7.7.tar.gz
- scala-2.12.8.tar.gz
- spark-2.4.2-bin-hadoop2.6.tar.gz
- apache-zookeeper-3.5.5-bin.tar.gz
2、解压
tar xvf hadoop-2.7.7.tar.gz -C /data/projects/common
tar xvf scala-2.12.8.tar.gz -C /data/projects/common
tar xvf spark-2.4.2-bin-hadoop2.6.tar.gz -C /data/projects/common
tar xvf apache-zookeeper-3.5.5-bin.tar.gz -C /data/projects/common
tar xvf jdk-1.8-linux-x64.tar.gz -C /data/projects/common/jdk
mv hadoop-2.7.7 hadoop
mv scala-2.11.12 scala
mv spark-2.4.2-bin-hadoop2.6 spark
mv apache-zookeeper-3.5.5-bin zookeeper
3、配置/etc/profile
export JAVA_HOME=/data/projects/common/jdk/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/data/projects/common/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export SPARK_HOME=/data/projects/common/spark
export PATH=$SPARK_HOME/bin:$PATH
# 此处最好将zookeeper的环境也配上(可选)
export ZOO_HOME=/data/projects/common/zookeeper
export PATH=$ZOO_HOME/bin:$PATH
二、集群部署
【1】、Zookeeper集群部署
1、写zoo.cfg配置文件
在128、129、130 app 用户下执行(可在128上配置完,发送到129和130上)
cd /data/projects/common/zookeeper/conf
vi zoo.cfg
tickTime=2000 # 心跳间隔(毫秒),间隔两秒心跳一次
initLimit=10 # 集群中的follower与leader之间初始连接时能容忍的最多心跳数
syncLimit=5 # follower与leader之间请求和答应最多能容忍的最多心跳数
dataDir=/data/projects/common/zookeeper/data/zookeeper # 该目录是用来存放myid信息跟服务器唯一的ID信息等
dataLogDir=/data/projects/common/zookeeper/logs # 存储日志
clientPort=2181 # 侦听客户端连接的端口 默认2181
admin.serverPort=8887 # 默认为8080 冲突
maxClientCnxns=1000 # 客户端连接最大数量
# ZK集群配置,服务器启动时,在dataDir中查找文件myid来知道它是哪台服务器
server.1= VM-0-1-centos:2888:3888
server.2= VM-0-2-centos:2888:3888
server.3= VM-0-3-centos:2888:3888
报错:Permission denied
原因:app用户无权限修改 /data/projects/common/ 目录文件
解决方案:调整app用户对 /data/projects/common/ 的所有权,再重写 zoo.cfg 文件即可;
# -R 表示修改当前目录及其子目录 app用户 apps组
# 因当前操作目录是/data/projects/common,故 * 代表/data/projects/common
chown -R app:apps *
2、配置节点id—在dataDir目录下
master节点写1 ,slave节点依次类推 此处写完,可打开myid文件检查是否写成功;
# VM-0-1-centos
echo 1 >> /data/projects/common/zookeeper/data/zookeeper/myid
# VM-0-2-centos
echo 2 >> /data/projects/common/zookeeper/data/zookeeper/myid
# VM-0-3-centos
echo 3 >> /data/projects/common/zookeeper/data/zookeeper/myid
3、启动zookeeper并查看状态
三个节点,先启动的是leader,后续启动的是follower
# 切换到zookeeper的bin目录下
cd /data/projects/common/zookeeper/bin/
# 使用zkServer.sh start 启动zookeeper ---三个节点,先启动的是leader,后续启动的是follower
./zkServer.sh start
# 需要三个节点都启动之后,才能正确查看状态
# 使用zkServer.sh status 查看zookeeper集群状态
./zkServer.sh status
./zkServer.sh stop # 停止
zk启动报错:java.net.BindException: Address already in use
JPS查看状态 java进程 QuorunPeerMain