ZooKeeper是一个由 Apache 开源的 分布式协调服务,专为分布式系统设计,用于解决分布式环境中的一致性问题、配置管理、服务发现、分布式锁、选主等常见需求。其核心设计目标是提供高可用、强一致性的分布式数据管理服务
1.克隆 克隆hadoop01节点,hadoop01——>管理——>克隆






2.登录 用户名:root 密码:123456

3.配置静态IP 同学们需要按照自己电脑的实际IP地址进行配置。


重启网络服务

测试运行

4.Xshell连接 静态IP地址配置成功之后,可以通过xshell连接克隆之后的虚拟机。


5.修改主机名 1.修改主机名

2.配置主机名映射

6.关闭防火墙 查看防火墙状态

关闭防火墙

1.配置Hosts文件 hadoop01、hadoop02、hadoop03节点配置hosts文件(配置一样)

测试hadoop01节点访问hadoop03节点

2.时钟同步
Hadoop 集群对节点的时间同步要求比较高,要求各个节点的系统时间不能相差太多,否则会造成很多问题,比如,最常见的连接超时问题。所以需要集群节点的系统时间与互联网的时间保持同步,但是在实际生产环境中,集群中大部分节点是不能连接外网的,这时候可以在内网搭建一个自己的时钟服务器(比如NTP服务器),然后让Hadoop集群的各个节点与这个时钟服务器的时间保持同步。
可以选择hadoop1节点作为时钟服务器。
1.查看时间类型
在hadoop01节点上输入date命令,可以查看到当前系统时间如下所示。

从结果可以看出系统时间为HKT(即香港时间),可以把时间改为CST(CST表示中部标准时间,即上海时间)。
2.修改时间类型 使用shanghai时间来覆盖当前的系统默认时间,具体操作如下所示。

注意:上述操作在集群各个节点都要执行,保证当前系统时间标准为上海时间。
3.配置 NTP 服务器 我们选择hadoop01节点来配置 NTP 服务器,集群其他节点定时同步hadoop01节点时间即可。 (1)检查 NTP 服务是否已经安装。 输入rpm -qa | grep ntp命令查看NTP服务是否安装,操作结果如下所示。
[root@hadoop1 ~] rpm -qa | grep ntp
ntp-4.2.6p5-12.el6.centos.2.x86_64
ntpdate-4.2.6p5-12.el6.centos.2.x86_64如果NTP服务已经安装,可以直接进行下一步,否则输入yum install -y ntp命令可以在线安装NTP服务。实际上就是安装两个软件, ntpdate-4.2.6p5-12.el6.centos.2.x86_64是用来和某台服务器进行同步的,ntp-4.2.6p5-12.el6.centos.2.x86_64 是用来提供时间同步服务的。

(2)修改配置文件ntp.conf 修改NTP服务配置,具体操作如下所示。
[root@hadoop01 ~]# vi /etc/ntp.conf
#启用 restrict限定该机器网段,192.168.229.131为当前节点的IP地址
restrict 192.168.0.111 mask 255.255.255.0 nomodify notrap
#注释掉 server 域名配置
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#添加如下两行配置,让本机和本地硬件时间同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10(3)启动NTP服务 执行chkconfig ntpd on命令,可以保证每次机器启动时,NTP服务都会自动启动,具体操作如下所示。
[root@hadoop01 ~] chkconfig ntpd on
(4)配置其他节点定时同步时间 Hadoop02和hadoop03节点通过Linux crontab 命令,可以定时同步hadoop01节点的系统时间,具体操作如下所示。
[root@hadoop02 ~]# crontab -e
#表示每个10分钟进行一次时钟同步
0-59/10 * * * * /usr/sbin/ntpdate hadoop01
[root@hadoop03 ~]# crontab –e
#表示每个10分钟进行一次时钟同步
0-59/10 * * * * /usr/sbin/ntpdate hadoop01备注:hadoop02和hadoop03节点也需要使用yum install -y ntp命令安装NTP服务,才能使用ntpdate时间同步命令。
3.集群SSH免密登录 (1)各个节点SSH免密登录 SSH(Secure Shell)是可以在应用程序中提供安全通信的一个协议,通过SSH可以安全地进行网络数据传输,它的主要原理就是利用非对称加密体系,对所有待传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露或者篡改。
但是Hadoop集群使用SSH不是用来进行数据传输的,而是在Hadoop集群启动和停止的时候,主节点需要通过SSH协议启动或停止从节点上面的进程。如果不配置SSH免密登录,对Hadoop集群的正常使用没有任何影响,但是在启动和停止Hadoop集群的时候,需要输入每个从节点的密码。可以想象一下,当集群规模比较大的时候,比如达到成百上千节点的规模,如果每次都要分别输入集群节点的密码,这种方法肯定是不可取的,所以要对Hadoop集群进行SSH免密登录的配置。
SSH免密登录的功能跟用户密切相关,为哪个用户配置了SSH,那个用户就具有SSH免密登录的功能,没有配置的用户则不具备该功能,这里选择为hadoop用户配置SSH免密登录。 首先在控制台,使用su命令切换到hadoop用户的根目录,然后使用ssh-keygen -t rsa命令(ssh-keygen是秘钥生成器,-t 是一个参数,rsa 是一种加密算法)生成秘钥对(即公钥文件id_rsa.pub和私钥文件id_rsa)。
1)配置hadoop01节点免密登录

2)将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中。

3)切换到hadoop用户的根目录,然后为.ssh目录及文件赋予相应的权限。

4)使用ssh命令登录hadoop01,第一次登录需要输入yes进行确认,第二次以后登录则不需要,此时表明设置成功。

5)配置hadoop02和hadoop03 ssh免密登录 hadoop02和hadoop03节点按照hadoop01节点一样配置SSH免密登录即可。
(2)配置集群SSH免密登录 为了实现集群节点之间SSH免密登录,我们还需要将hadoop02和hadoop03的公钥id_ras.pub复制到hadoop01中的authorized_keys文件中,具体操作命令如下所示:
[hadoop@hadoop02 ~]$cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop01 'cat >> ~/.ssh/authorized_keys'
[hadoop@hadoop03 ~]$cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop01 'cat >> ~/.ssh/authorized_keys'然后将hadoop01中的authorized_keys文件分发到hadoop02和hadoop03节点,具体操作如下所示:
[hadoop@hadoop01 .ssh]$scp -r authorized_keys hadoop@hadoop02:~/.ssh/
[hadoop@hadoop01 .ssh]$scp -r authorized_keys hadoop@hadoop03:~/.ssh/然后hadoop01节点就可以免密登录hadoop02和hadoop03节点。

4.集群脚本开发 创建tools目录,并准备脚本与配置文件

给脚本授予可执行权限

配置脚本环境变量


测试运行集群脚本

Zookeeper 是一个分布式应用程序协调服务,大多数的分布式应用都需要 Zookeeper 的支持。Zookeeper 安装部署主要有两种模式:一种是单节点模式,另一种是分布式集群模式。因为在生产环境中使用的都是分布式集群,所以本小节直接讲解Zookeeper分布式集群部署模式。 1.下载并解压zookeeper 到官网(地址:http://Zookeeper.apache.org/releases.html# download)下载Zookeeper稳定版本的zookeeper-3.4.6.tar.gz安装包,然后上传至hadoop01 节点的/home/hadoop/app目录下并解压,具体操作如下所示。
#解压Zookeeper
[hadoop@hadoop01 app]$ tar -zxvf zookeeper-3.4.6.tar.gz
#创建Zookeeper软连接
[hadoop@hadoop01 app]$ ln -s zookeeper-3.4.6 zookeeper2.修改zoo.cfg配置文件 在运行 Zookeeper 服务之前,需要新建一个配置文件。这个配置文件习惯上命名为zoo.cfg,并保存在conf子目录中,其核心内容如下所示。
[hadoop@hadoop01 app]$ cd zookeeper
[hadoop@hadoop01 zookeeper]$ cd conf/
[hadoop@hadoop01 conf]$ ls
configuration.xsl log4j.properties zoo.cfg zoo_sample.cfg
[hadoop@hadoop01 conf]$ vi zoo.cfg
#数据目录需要提前创建
dataDir=/home/hadoop/data/zookeeper/zkdata
#日志目录需要提前创建
dataLogDir=/home/hadoop/data/zookeeper/zkdatalog
#访问端口号
clientPort=2181
#server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:38883.同步zookeeper安装目录 使用scp命令将hadoop01节点的Zookeeper安装目录,整体同步到集群的hadoop02和hadoop03节点,具体操作如下所示。
[hadoop@hadoop01 app]$scp -r zookeeper-3.4.6 hadoop@hadoop02:/home/hadoop/app/
[hadoop@hadoop01 app]$scp -r zookeeper-3.4.6 hadoop@hadoop03:/home/hadoop/app/然后分别在hadoop02和hadoop03节点上创建Zookeeper软连接,具体操作如下所示。
[hadoop@hadoop02 app]$ln -s zookeeper-3.4.6 zookeeper
[hadoop@hadoop03 app]$ ln -s zookeeper-3.4.6 zookeeper4.创建数据和日志目录 在集群各个节点创建Zookeeper数据目录和日志目录,需要跟zoo.cfg配置文件保持一致,具体操作如下所示。
#创建Zookeeper数据目录
[hadoop@hadoop01 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
[hadoop@hadoop02 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
[hadoop@hadoop03 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
#创建Zookeeper日志目录
[hadoop@hadoop01 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
[hadoop@hadoop02 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
[hadoop@hadoop03 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog5.创建各节点服务编号 分别在Zookeeper集群各个节点,进入/home/hadoop/data/zookeeper/zkdata目录,创建文件myid,然后分别输入服务编号,具体操作如下所示:
#hadoop01节点
[hadoop@hadoop01 zkdata]$ touch myid
[hadoop@hadoop01 zkdata]$ echo 1> myid
#hadoop02节点
[hadoop@hadoop02 zkdata]$ touch myid
[hadoop@hadoop02 zkdata]$ echo 2> myid
#hadoop03节点
[hadoop@hadoop03 zkdata]$ touch myid
[hadoop@hadoop03 zkdata]$ echo 3> myid注意:每个节点服务编号的值是一个整形数字且不能重复。
6.启动Zookeeper集群服务 在集群各个节点分别进入Zookeeper安装目录,然后使用如下命令启动Zookeeper服务。
[hadoop@hadoop01 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop02 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop03 zookeeper]$ bin/zkServer.sh startZookeeper集群启动一会之后,通过如下命令查看Zookeeper集群状态。
[hadoop@hadoop01 zookeeper]$ bin/zkServer.sh status
[hadoop@hadoop02 zookeeper]$ bin/zkServer.sh status
[hadoop@hadoop03 zookeeper]$ bin/zkServer.sh status如果在Zookeeper集群中,其中一个节点为leader领导者,另外两个节点是follower跟随者,说明Zookeeper集群安装部署成功。