详尽的视频讲解,请查看该地址:https://edu.csdn.net/course/detail/9572
首先准备好3个节点分别为hadoop01、hadoop02、hadoop03,接下来带着大家一起搭建最小规模的Zookeeper分布式集群。
1.1主机规划
使用准备的3个节点,搭建一个最小规模的Zookeeper分布式集群。
1.2软件规划
为了方便集群各个组件兼容性管理,这里选择一个CDH稳定版本的zookeeper-3.4.5-cdh5.10.0.tar.gz,软件规划如下图所示。
1.3用户规划
在每个节点规划好自己的用户和用户组,为后面在哪个用户下安装Zookeeper做好准备。
1.4目录规划
我们规划大数据相关软件统一放在app目录下,脚本统一放在tools目录下,日志数据放在data目录下。
2.1时钟同步
使用上海时间覆盖本地时间
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
使用NTP(网络时间协议)实现时钟同步
#在线安装ntp
yum install ntp
#网络时间同步
ntpdate pool.ntp.org
2.2Hosts 文件配置
一般情况下通过主机名是无法访问虚拟机的,需要通过IP地址才可以访问虚拟机。但是IP地址不容易记住,这时可以通过配置主机名与IP地址的映射关系,从而可以通过主机名来访问虚拟机。
为了方便各个节点相互通过主机名访问,每个节点都需要相同配置。修改示例如下所示:
vi /etc/hosts
192.168.20.121 hadoop01
192.168.20.122 hadoop02
192.168.20.123 hadoop03
2.3关闭防火墙
防火墙是对我们的服务器进行的一种保护,但是有时候也会妨碍集群间的相互通信,为了方便起见我们可以关闭掉防火墙。
针对centos6.x各个节点防火墙操作如下所示:
#查看防火墙状态
service iptables status
#永久关闭防火墙
chkconfig iptables off
#临时关闭防火墙
service iptables stop
备注:如果使用centos7,以上命令不适用。
2.4SSH免密码登录
2.4.1首先对每个节点单独配置ssh免密码登录
下面以hadoop01节点为例:
切换到用户根目录操作,生成秘钥
mkdir .ssh
ssh-keygen -t rsa
进入.ssh目录,将公钥拷贝到认证文件
cd .ssh
cat id_rsa.pub >> authorized_keys
退回到根目录,对.ssh赋予权限
chmod 700 .ssh
chmod 600 .ssh/*
测试当前节点ssh免密码登录
ssh hadoop01
2.4.2实现各个节点之间免密码登录
将hadoop02和hadoop03的共钥id_ras.pub拷贝到hadoop01中的authorized_keys文件中。
cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop01 'cat >> ~/.ssh/authorized_keys'
然后将hadoop01中的authorized_keys文件分发到hadoop02和hadoop03节点上面。
scp -r authorized_keys hadoop@hadoop02:~/.ssh/
scp -r authorized_keys hadoop@hadoop03:~/.ssh/
然后hadoop01、hadoop02和hadoop03就可以免密码互通
2.5集群脚本准备
2.5.1编写配置文件及集群脚本
选一个主节点,比如hadoop01,创建/home/hadoop/tools脚本存放目录
mkdir /home/hadoop/tools
分别编写脚本配置文件和分发文件
deploy.conf deploy.sh runRemoteCmd.sh
deploy.conf 具体内容如下所示:
#### NOTES
# There is crontab job using this config file which would compact log files and remove old log file.
# please be carefully while modifying this file until you know what crontab exactly do
#hdp
hadoop01,all,namenode,zookeeper,resourcemanager,
hadoop02,all,slave,namenode,zookeeper,resourcemanager,
hadoop03,all,slave,datanode,zookeeper,
备注:第一列为各个节点的主机名,其他列为自己对各个节点打的标签。
deploy.sh具体内容如下所示:
#!/bin/bash
#set -x
if [ $# -lt 3 ]
then
echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"
echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"
exit
fi
src=$1
dest=$2
tag=$3
if [ 'a'$4'a' == 'aa' ]
then
confFile=/home/hadoop/tools/deploy.conf
else
confFile=$4
fi
if [ -f $confFile ]
then
if [ -f $src ]
then
for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`
do
scp $src $server":"${dest}
done
elif [ -d $src ]
then
for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`
do
scp -r $src $server":"${dest}
done
else
echo "Error: No source file exist"
fi
else
echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"
fi
备注:该脚本为集群分发脚本,可以快速、方便地将主节点的文件或者目录分发到其他从节点。
runRemoteCmd.sh具体内容如下所示:
#!/bin/bash
#set -x
if [ $# -lt 2 ]
then
echo "Usage: ./runRemoteCmd.sh Command MachineTag"
echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"
exit
fi
cmd=$1
tag=$2
if [ 'a'$3'a' == 'aa' ]
then
confFile=/home/hadoop/tools/deploy.conf
else
confFile=$3
fi
if [ -f $confFile ]
then
for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`
do
echo "*******************$server***************************"
ssh $server "source ~/.bashrc; $cmd"
done
else
echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"
fi
备注:该脚本为集群远程命令执行脚本,方便在各个节点分别执行传入的命令。
2.5.2给脚本添加执行权限
分别给以下脚本添加执行权限
chmod u+x deploy.sh
chmod u+x runRemoteCmd.sh
2.5.3配置脚本环境变量
vi ~/.bashrc
PATH=/home/hadoop/tools:$PATH
export PATH
2.5.4使用脚本创建规划目录
批量创建各个节点相应目录
runRemoteCmd.sh "mkdir /home/hadoop/app" all
runRemoteCmd.sh "mkdir /home/hadoop/data" all
Zookeeper是由Java编写,运行在JVM上,所以需要提前安装JDK运行环境。
3.1下载JDK
可以到官网下载对应版本的jdk,这里选择安装jdk1.8版本,并上传至主节点(hadoop01)/home/hadoop/app目录下。
3.2解压JDK
通过tar -zxvf命令对jdk安装包进行解压即可。
3.3创建软连接
为了方便版本的更换和学习使用,可以创建jdk软连接指向jdk真实安装路径。可以使用如下命令:ln -s jdk1.8.0_51 jdk
3.4配置环境变量
3.4.1修改/etc/profile文件
如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的shell。
vi /etc/profile
JAVA_HOME=/home/hadoop/app/jdk
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:/home/hadoop/tools:$PATH
export JAVA_HOME CLASSPATH PATH
3.4.2修改.bashrc文件
这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。
vi ~/.bashrc
JAVA_HOME=/home/hadoop/app/jdk
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:/home/hadoop/tools:$PATH
export JAVA_HOME CLASSPATH PATH
3.5使配置文件生效
通过source ~/.bashrc命令使得刚刚配置的环境变量生效。
3.6验证JDK是否安装成功
通过命令:java –version查看jdk版本,如果能查看到当前jdk版本,说明jdk安装成功
3.7JDK安装包同步到其他节点
通过脚本命令:deploy.sh jdk1.8.0_51 /home/hadoop/app/ slave将jdk安装包同步到其他节点,然后重复3.3~3.6步骤完成各个节点的jdk安装。
4.1下载Zookeeper
Apache版本下载地址:https://archive.apache.org/dist/
CDH版本下载地址:http://archive-primary.cloudera.com/cdh5/cdh/5/
下载对应版本Zookeeper,这里下载zookeeper-3.4.5-cdh5.10.0.tar.gz版本,并上传至/home/hadoop/app目录下。
4.2解压Zookeeper
通过tar -zxvf命令对Zookeeper安装包进行解压即可。
4.3创建软连接
为了方便版本的更换和学习使用,可以创建zookeeper软连接指向zookeeper真实安装路径。可以使用如下命令:ln -s zookeeper-xxx zookeeper
4.4修改zoo.cfg
4.4.1拷贝一份zoo.cfg配置文件
默认情况下,Zookeeper的conf目录没有zoo.cfg,此时需要通过如下命令拷贝一份:
cp zoo_sample.cfg zoo.cfg
4.4.2修改zoo.cfg配置文件
# The number of milliseconds of each tick
#这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
#配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数。
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
#Leader 与 Follower 之间发送消息,请求和应答时间长度
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
#数据目录需要提前创建
dataDir=/home/hadoop/data/zookeeper/zkdata
#日志目录需要提前创建
dataLogDir=/home/hadoop/data/zookeeper/zkdatalog
# the port at which the clients will connect
#访问端口号
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
#server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
4.5zk安装目录同步到其他节点
将Zookeeper安装目录整体分发到其他节点
deploy.sh zookeeper-3.4.5-cdh5.10.0 /home/hadoop/app/ slave
并分别创建软连接
ln -s zookeeper-3.4.5-cdh5.10.0 zookeeper
4.6创建规划的目录
使用集群脚本统一创建规划目录
runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdata" all
runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdatalog" all
4.7修改每个节点服务编号
分别到各个节点,进入/home/hadoop/data/zookeeper/zkdata目录,创建文件myid,里面的内容分别填充为:1、2、3
[hadoop@hadoop01 zkdata]$ vi myid
[hadoop@hadoop01 zkdata]$ cat myid
1
[hadoop@hadoop02 zkdata]$ vi myid
[hadoop@hadoop02 zkdata]$ cat myid
2
[hadoop@hadoop03 zkdata]$ vi myid
[hadoop@hadoop03 zkdata]$ cat myid
3
4.8测试运行
启动Zookeeper
runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" all
查看Zookeeper进程
runRemoteCmd.sh "jps" all
查看Zookeeper状态
runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh status" all
如果查看到Zookeeper节点状态包含leader 和follower,说明Zookeeper集群安装成功。
详尽的视频讲解,请查看该地址:https://edu.csdn.net/course/detail/9572