canal 02

本文详细介绍了Zookeeper的三种安装模式(单机、伪集群和分布式),推荐CDH版本的选择理由,以及集群规划、环境准备、JDK和Zookeeper的安装配置步骤。包括时间同步、Hosts文件配置、SSH免密登录、脚本部署和Zookeeper的配置,确保集群环境的搭建与一致性。

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 用户下安装。

  1. 目录规划
    为了方便统一管理,提前规划好软件目录、脚本目录和数据目录。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值