在三台计算机上搭建 zookeeper 并正确运行
1. 服务器准备
1.1 服务器规划
我在 windows 上安装了三台 centos7 虚拟机,分别命名为 centos/test/alpha(随便命名的,不用在意)
计算机名 | IP 地址 |
centos | 172.21.92.121 |
test | 172.21.92.120 |
alpha | 172.21.92.116 |
选取 centos
作为hadoop
的namenode
,选择centos
/test
/alpha
作为hadoop
集群的datanode
,并修改各自的/etc/hosts
为以下内容
172.21.92.121 centos
172.21.92.120 test
172.21.92.116 alpha
#以centos为namenode,实现免密登录
ssh-copy-id -i root@0.0.0.0
ssh-copy-id -i root@test
ssh-copy-od -i root@alpha
上述搞定后,理论上就搞定了这一步的事儿
2. hadoop 环境搭建
2.1 下载 hadoop
本例中我用到的是hadoop-2.7.7
,具体下载地址可以看我自己在博客园上写的东西
2.2 安装
默认安装好了java
并且配置好了JAVA_HOME
环境变量,直接解压到/usr/local
目录中,并重命名为hadoop
(主要是我觉得这样比较好记-_-)。
2.3 配置
将hadoop
的安装目录添加到环境变量 path 中,如
#/etc/profile中的最后的内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin;
使用sh /etc/profile
使环境变量生效
再修改$HADOOP_HOME/etc/hadoop
目录下如下 5 个文件:
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
hadoop-env.sh
中主要配置一下JAVA_HOME
的绝对路径就行了
core-site.xml
先简单配置如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://centos:9000</value>
</property>
</configuration>
hdfs-site.xml
配置如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
mapred-site.xml
配置如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
配置如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.4 格式化
配置好hadoop
后需要先格式化下子
hdfs namenode -format
2.5 测试
本篇稿子是实践后写的,应该不会有问题,有问题再说吧
3. zookeeper 环境搭建
3.1 下载
本例中选用的是zookeeper-3.4.14
,可以到清华镜像中下载
3.2 安装
安装是很简单了,直接解压缩到/usr/local
目录下
tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local
# 为方便我记忆,改名成zookeeper
mv /usr/local/zookeeper-3.4.14 usr/local/zookeeper
3.3 配置
具体的配置可以参考分布式 Zookeeper 安装搭建详解,我就是这么弄的,我的/conf/zoo.cfg
下如下那样儿
#发送心跳的间隔时间,单位:毫秒
tickTime=2000
#zookeeper保存数据的目录
dataDir=/usr/local/zookeeper/data
#日志目录
dataLogDir=/usr/local/zookeeper/dataLog
#端口
clientPort=2181
#leader和follower初始化连接时最长能忍受多少个心跳时间的间隔数
initLimit=10
#leader和follower之间发送消息,请求和英达时间长度,最长不能超过多少个tickTime的时间长度
syncLimit=5
#zookeeper机器列表,server.order这里的Order依据集群的机器个数依次进行递增,这里的server1、server2、server3表示机器IP地址
server.1=centos:2888:3888
server.2=alpha:2888:3888
server.3=test:2888:3888
PS:上面的 data 目录和 dataLog 目录默认是没有的,需要自己预先建立好。并且真正用户开发环境的配置文件,尽量删除删掉上面的注释,以及多余的空白字符(划重点),有可能会造成 zookeeper 的读取失败
在上述创建的/usr/local/zookeeper/data
文件夹中创建myid
文件,其内容填写 1
3.4 将配置好的 zookeeper 分发到集群所有机器
分发过程,你懂的,就是scp
命令将文件考到其他机子上,再修改各机子上的/usr/local/zookeeper/data/myid
文件,与配置文件中的 order 保持一致。
3.5 测试
分别在centos
/test
/alpha
执行zkServer.sh start
启动zookeeper
服务端,再使用zkServer.sh status
查看状态,结果如下:
[root@alpha ~]#
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@test ~]#
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@test ~]#
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
上述结果表明zookeeper
启动成功!