1 安装模式
Zookeeper 安装模式有三种:
单机模式:Zookeeper 只运行在一台服务器上,适合测试环境。
伪集群模式:一台物理机上运行多个 Zookeeper 实例,适合测试环境。
分布式集群模式:Zookeeper 运行于一个集群中,适合生产环境。
2 版本选择
概述
目前 Hadoop 发行版非常多,有华为发行版、Intel 发行版、Cloudera 发行版(CDH)等,所
有这些发行版均是基于 Apache Hadoop 衍生出来的,之所以有这么多的版本,完全是由
Apache Hadoop 的开源协议决定的:任何人可以对其进行修改,并作为开源或商业产品发布 /销售。
国内绝大多数公司发行版是收费的,比如 Intel 发行版、华为发行版等,尽管这些发行版增
加了很多开源版本没有的新 feature,但绝大多数公司选择 Hadoop 版本时会将把是否收费作
为重要指标,不收费的 Hadoop 版本主要有三个(均是国外厂商),分别是:
Cloudera 版本(Cloudera’s Distribution Including Apache Hadoop,简称"CDH")、 Apache 基
金会 hadoop(使用这个需要二次开发能力)、 Hortonworks 版本(Hortonworks Data Platform,简称"HDP")。
按照上面的先后顺序代表了在国内的使用率,CDH 和 HDP 虽然是收费版本,但是他们是开
源的,只是收取服务费用。
对于国内而言,绝大多数选择 CDH 版本,主要理由如下:
1.CDH 对 Hadoop 版本的划分非常清晰,分为几个系列的版本:cdh3、cdh4、cdh5 和 cdh6, 相比而言,Apache 版本则混乱得多。
CDH 文档清晰,很多采用 Apache 版本的用户都会阅读 cdh 提供的文档,包括安装文档、升级文档等。
3.组件集成做了很多兼容性处理,使用方便,避免了版本兼容性问题。
HDP 版本是比较新的版本,目前与 apache 基本同步,因为 Hortonworks 内部大部分员工都
是 apache 代码贡献者,尤其是 Hadoop x 的贡献者。
版本选择
当我们决定是否采用某个软件用于开发环境时,通常需要考虑以下几个因素:
1.是否为开源软件,即是否免费。 是否有稳定版,这个一般软件官方网站会给出说明。
3.是否经实践验证,这个可通过检查是否有一些大公司已经在生产环境中使用知道。
4.是否有强大的社区支持,当出现一个问题时,能够通过社区、论坛等网络资源快速获取解决方法。
3 集群规划
1.主机规划
Zookeeper 最小集群是 3 节点集群,学习使用足够,生产环境可以根据实际资源情况使用 5 或 7 或 9 节点 Zookeeper 集群。
软件规划
JDK 使用工作中常用的较新版本 jdk1.8(java10 最新),选择 CDH 版本的 Zookeeper 与 Hadoop 兼容即可。
、
图解:zookeeper和hadoop都在cdh的网站下,搜一下就好
3.用户规划
大数据平台集群软件统一在 hadoop 用户下安装。
- 目录规划
为了方便统一管理,提前规划好软件目录、脚本目录和数据目录。
4 环境准备
1.时钟同步
因为 Hadoop 对集群中各个机器的时间同步要求比较高, 要求各个机器的系统时间不能相
差太多, 不然会造成很多问题。比如,最常见的连接超时问题。所以需要配置集群中各个
机器和互联网的时间服务器进行时间同步, 但是在实际生产环境中, 集群中大部分服务器
是不能连接外网的, 这时候可以在内网搭建一个自己的时间服务器( NTP 服务器),然后
让集群的各个机器与这个时间服务器定时的进行时间同步。
如何搭建时间服务器呢?
以主机名为 hadoop01 的机器为例。
1)首先查看一下该机器的时间
输入命令:date 查看当前节点时间。 从结果可以看到当前时间为 EST(东部标准时间, 即纽约时间),我们处在中国,所以可以把时间改为 CST(中部标准时间,即上海时间)。
2)如何修改时间标准?
只需要在所有节点执行命令:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 即可。实际
上就是把 Shanghai 时间的文件复制到 localtime 中。
注意:上面操作在 3 个节点都要执行,保证系统当前时间标准为上海时间。OK,接下来进 行时钟同步的配置。
3)配置 NTP 服务器
我们选择第一台机器为 NTP 服务器,其他机器和这台机器进行定时的时间同 步。
(a) 检查 NTP 服务是否已经 安装
输入命令:rpm -qa | grep ntp 即可。
如果没有安装就输入命令 yum install -y ntp 进行安装。实际上就是安装两个软件,其中
ntpdate-4.6p5-1.el6.centos.x86_64 是 用 来 和 某 台 服 务 器 进 行 同 步 的 。
ntp-4.6p5-1.el6.centos.x86_64 是用来提供时间同步服务的。
(b)修改配置文件 ntp.conf
输入命令:vi /etc/ntp.conf,然后进行如下修改:
(1)启用 restrict,限定该机器网段 ,具体操作如下:
将 restrict 192.168.74.136 mask 255.255.255.0 nomodify notrap 行的注释去掉,并且将网段改 为自己本机的网段,我们这里是 74 网段。当然也可以直接输入本机的 IP 地址。
(2)注释掉 server 域名配置
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
以上 4 个 server 是时间服务器的域名,这里不需要连接互联网,所以将他们注释掉。
*
在该文件中添加下边两行,让本机和本地硬件时间同步。
server 127.127.1.0
fudge 127.127.1.0 stratum 10
默认的配置文件里这两个是被注释掉的。NTP 服务器会根据这里的配置,把自己的时间作 为 NTP 服务器的时间,即和自己同步。考虑到有的局域网里不可以访问外网,所有这里需 要配置该配置项。
(c) 启动 NTP 服务
输入命令 chkconfig ntpd on 即可。这样每次机器启动时,NTP 服务都会自动启动。
4)配置其他机器的定时时间同步
实际上配置其他机器的时间服务器时钟同步并不难,只需要在对应机器输入命令:crontab -e 即可,然后在会话中输入:
0-59/10 * * * * /usr/sbin/ntpdate hadoop01
下面对这行内容的含义进行简要的解释:
(1)其中 0-59/10 * * * * 表示每隔 10 分钟进行一次时钟同步,空格隔开的五段是 crontab
语法格式中时间段,一共 5 段,其中*号表示任意时间,每一段时间的具体含义如下:
(2)其中/usr/sbin/ntpdate hadoop01 表示执行的命令,即本机和主机名为 hadoop01 的机器
进行定时的时钟同步。
(3)在其他节点进行同样的操作,然后过 10 分钟之后再次查看 3 台机器的时间,如果 3
台机器的时间一致就表示实现了时间的定时同步。
2.Hosts 文件配置
配置集群所有节点 ip 与 hostname 的映射关系。
vi /etc/hosts
19168.20.121 hadoop01
19168.20.122 hadoop02
19168.20.123 hadoop03
3.关闭防火墙
查看防火墙状态
service iptables status
永久关闭防火墙chkconfig iptables off
临时关闭防火墙
service iptables stop
4.SSH 免密码登录
首先每个节点单独配置 ssh 免密码登录,下面以 hadoop01 节点为例。
切换到用户根目录
mkdir .ssh
ssh-keygen -t rsa
进入.ssh 文件
cd .ssh
cat id_rsa.pub >> authorized_keys
退回到根目录
chmod 700 .ssh
chmod 600 .ssh/*
进入hadoop用户,分别将 hadoop02 和 hadoop03 的共钥 id_ras.pub 拷贝到 hadoop01 中的 authorized_keys 文件中。
cat ~/.ssh/id_rsa.pub | ssh hadoop@cdh01 ‘cat >> ~/.ssh/authorized_keys’
然后将 hadoop01 中的 authorized_keys 文件分发到 hadoop02 和 hadoop03 节点上面。
scp -r authorized_keys hadoop@cdh02:~/.ssh/
scp -r authorized_keys hadoop@cdh03:~/.ssh/
然后 hadoop01、hadoop02 和 hadoop03 就可以免密码互通
5.集群脚本准备
创建/home/hadoop/tools 脚本存放目录
mkdir /home/hadoop/tools
编写脚本配置文件和分发文件
deploy.conf deploy.sh runRemoteCmd.sh
vi deploy.conf 这个配置文件第二列和第三列是标签,第三列指定为all,可以发送给所有,一般不这样干,第二列可以指定分类,后面第四列也是这个道理
#集群角色规划
cdh01,master,all,zk,
cdh02,slave,all,zk,
cdh03,slave,all,zk,
vi deploy.sh 这个脚本三个参数,文件名字,拷贝到目标端的路径,标签,使用这个脚本之前呢,要进入到需要拷贝的文件的目录下
#!/bin/bash
if [ $# -lt 3 ]
then
echo “Usage: ./deploy.sh srcFile(or Dir) descFile(or Dir) MachineTag”
echo “Usage: ./deploy.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":"server":"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":"server":"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
给脚本添加执行权限
chmod u+x deploy.sh
测试下脚本:
vi runRemoteCmd.sh
#!/bin/bash
if [ $# -lt 2 ]
then
echo “Usage:./runRemoteCmd.sh Command MachineTagh”
echo “Usage:./runRemoteCmd.sh Command MachineTagh confFile”
exit
fi
cmd=$1
tag=$2
if [ ‘b’$3’b’ == ‘bb’ ]
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”
fi
chmod u+x runRemoteCmd.sh
测试下:
6.第一台 cdh01配置脚本环境变量
vi ~/.bashrc 这里暂时可以先不加,后面配置jdk也配置了
PATH=/home/hadoop/tools:$PATH
export PATH
source ~/.bashrc
批量创建各个节点相应目录
runRemoteCmd.sh “mkdir /home/hadoop/app” all
runRemoteCmd.sh “mkdir /home/hadoop/data” all
slave没有的话,就把all 改为 slave
5.JDK 安装
Zookeeper 是由 Java 编写,运行在 JVM,所以需要提前安装 JDK 运行环境。
1.下载 JDK
可以到官网下载对应版本的 jdk,这里选择安装 jdk1.8 版本,并上传至/home/hadoop/app 目录下。
解压 JDK
通过 tar -zxvf 命令对 jdk 安装包进行解压即可。
3.创建软连接
为了方便版本的更换和学习使用,可以创建 jdk 软连接指向 jdk 真实安装路径。可以使用如下命令:ln -s jdk1.8.0_51 jdk
4.配置环境变量
1)修改/etc/profile 文件
如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的 shell 都有权使用 这些环境变量,可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的 shell。
vi /etc/profile
JAVA_HOME=/home/hadoop/app/jdk
CLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
PATH=JAVAHOME/bin:/home/hadoop/tools:JAVA_HOME/bin:/home/hadoop/tools:JAVAHOME/bin:/home/hadoop/tools:PATH
export JAVA_HOME CLASSPATH PATH
2)修改.bashrc 文件
这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个 特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目 录下的.bashrc 文件就可以了。
vi ~/.bashrc
JAVA_HOME=/home/hadoop/app/jdk
CLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
PATH=JAVAHOME/bin:/home/hadoop/tools:JAVA_HOME/bin:/home/hadoop/tools:JAVAHOME/bin:/home/hadoop/tools:PATH
export JAVA_HOME CLASSPATH PATH
5.source 使配置文件生效
通过 source ~/.bashrc 命令使得刚刚配置的环境变量生效。
6.检查 JDK 是否安装成功
通过命令:java –version 查看 jdk 版本,如果能查看到当前 jdk 版本,说明 jdk 安装成功
7.JDK 安装包同步到其他节点
通过脚本命令:deploy.sh jdk1.8.0_51 /home/hadoop/app/ slave将 jdk安装包同步到其他节点,
然后重复 3.3~3.6 步骤完成各个节点的 jdk 安装。
ln -s jdk1* jdk
vi ~/.bashrc 这里path就不需要 脚本的目录
JAVA_HOME=/home/hadoop/app/jdk
CLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
PATH=JAVAHOME/bin:JAVA_HOME/bin:JAVAHOME/bin:PATH
export JAVA_HOME CLASSPATH PATH
6.zk 安装配置
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 目录下。
解压 Zookeeper
通过 tar -zxvf 命令对 Zookeeper 安装包进行解压即可。
3.创建软连接
为了方便版本的更换和学习使用,可以创建zookeeper软连接指向zookeeper真实安装路径。
可以使用如下命令:ln -s zookeeper-xxx zookeeper
4.修改 zoo.cfg 配置文件 /home/hadoop/app/zookeeper/conf目录下
具体配置见配置文件 百度云配置文件改下最下面的hostname即可
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=cdh01:2888:3888
server.2=cdh02:2888:3888
server.3=cdh03:2888:3888
5.zk 安装目录同步到其他节点
将 Zookeeper 安装目录整体分发到其他节点
deploy.sh zookeeper-3.4.5-cdh5.10.0 /home/hadoop/app/ slave
并分别创建软连接
ln -s zookeeper-3.4.5-cdh5.10.0 zookeeper
6.创建规划的目录
runRemoteCmd.sh “mkdir -p /home/hadoop/data/zookeeper/zkdata” all
runRemoteCmd.sh “mkdir -p /home/hadoop/data/zookeeper/zkdatalog” all
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
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
查看并操作 znode
cd /home/hadoop/app/zookeeper/bin
zkCli.sh
本文详细介绍了Zookeeper的三种安装模式(单机、伪集群和分布式),推荐CDH版本的选择理由,以及集群规划、环境准备、JDK和Zookeeper的安装配置步骤。包括时间同步、Hosts文件配置、SSH免密登录、脚本部署和Zookeeper的配置,确保集群环境的搭建与一致性。
918

被折叠的 条评论
为什么被折叠?



