实验步骤
- 将ZooKeeper集群模式启动
- 获取安装包
- 安装包在本地:通过XFTP等工具将安装包上传到虚拟机中
- 安装包在网络:
- 虚拟机可以访问互联网
- 虚拟机无法访问互联网
- 解压缩安装包
- 将解压出来安装目录重命名
- 配置环境变量
- 刷新环境变量,使新增的环境变量生效
- 修改hadoop相关配置文件
- 修改core-site.xml配置文件
- 修改hdfs-site.xml配置文件
- 修改hadoop-env.sh配置文件
- 修改slaves配置文件
- 将配置好的文件分发给集群中的其他节点
- 将hadoop的安装包分发给集群中的其他节点
- 将profile环境变量分发给集群中其他节点
- 创建配置目录中所涉及到的目录
- 启动管理日志Journalnode节点
- 在第一台节点上格式化NameNode
- 启动第一台节点的NameNode节点
- 在第二台节点上同步hadoop01节点的元数据信息
- 启动hadoop02节点的NameNode节点
- zkfc对接hdfs,实现主备抢占
- 启动zkfc服务进程
- hadoop01节点上启动zkfc
- hadoop02节点上启动zkfc
- 启动DataNode节点
一、启动ZooKeeper集群服务
注意:一个一个的启动,即一个一个的使用zkServer.sh start命令后再使用zkServer.sh status命令查看节点状态。
1、启动hadoop01节点的ZooKeeper服务
[root@hadoop01 install]# zkServer.sh start
[root@hadoop01 install]# zkServer.sh status
输出结果,如下图所示:
2、启动hadoop02节点的ZooKeeper服务
[root@hadoop02 ~]# zkServer.sh start
[root@hadoop02 ~]# zkServer.sh status
输出结果,如下图所示:
3、启动hadoop03节点的ZooKeeper服务
[root@hadoop03 ~]# zkServer.sh start
[root@hadoop03 ~]# zkServer.sh status
输出结果,如下图所示:
二、安装Hadoop
1、将hadoop安装包解压到指定的安装目录
[root@hadoop01 install]# cd
[root@hadoop01 ~]# tar -zxvf hadoop-2.7.7.tar.gz -C /opt/install/
2、进入到安装目录,对hadoop的安装目录进行重命名
[root@hadoop01 ~]# cd /opt/install/
[root@hadoop01 install]# mv hadoop-2.7.7/ hadoop
3、配置hadoop的环境变量
[root@hadoop01 install]# vim /etc/profile
export HADOOP_HOME=/opt/install/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
输出结果,如下图所示:
4、刷新环境变量,使得新增环境变量生效
[root@hadoop01 install]# source /etc/profile
5、验证hadoop版本信息
[root@hadoop01 install]# hadoop version
输出结果,如下图所示:
三、修改hadoop配置文件
1、修改core-site.xml配置文件
[root@hadoop01 ~]# cd /opt/install/hadoop/etc/hadoop/
[root@hadoop01 hadoop]# vim core-site.xml
<configuration>
<property>
<!--不启用服务级授权,默认为false-->
<name>hadoop.security.authorization</name>
<value>false</value>
</property>
<property>
<!--配置hadoop的临时目录-->
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
<property>
<!--指定hdfs的nameservice为cluster-->
<name>fs.defaultFS</name>
<value>hdfs://cluster</value>
</property>
<property>
<!--指定 zookeeper地址-->
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
<!--指定ZooKeeper会话超时时间-->
<name>ha.zookeeper.session-timeout.ms</name>
<value>10000</value>
</property>
</configuration>
输出结果,如下图所示:
2、修改hdfs-site.xml配置文件
[root@hadoop01 hadoop]# vim hdfs-site.xml
<configuration>
<!--设置副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定hdfs的nameservice为cluster-->
<property>
<name>dfs.nameservices</name>
<value>cluster</value>
</property>
<!--cluster下有两个NameNode,分别是namenode01,namenode02-->
<property>
<name>dfs.ha.namenodes.cluster</name>
<value>namenode01,namenode02</value>
</property>
<!--namenode01的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.cluster.namenode01</name>
<value>hadoop01:9000</value>
</property>
<!--namenode01的http通信地址-->
<property>
<name>dfs.namenode.http-address.cluster.namenode01</name>
<value>hadoop01:8989</value>
</property>
<!--namenode02的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.cluster.namenode02</name>
<value>hadoop02:9000</value>
</property>
<!--namenode02的http通信地址-->
<property>
<name>dfs.namenode.http-address.cluster.namenode02</name>
<value>hadoop02:8989</value>
</property>
<!--是否启用HA自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled.cluster</name>
<value>true</value>
</property>
<!--指定NameNode的元数据在JournalNode上的存放位置-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/cluster</value>
</property>
<!--指定JournalNode在本地磁盘存放数据的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/hadoop/journal</value>
</property>
<!--指定NameNode在本地磁盘存放数据的位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/namenode</value>
</property>
<!--指定DataNode在本地磁盘存放数据的位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/datanode</value>
</property>
<!--配置隔离机制方法,多个机制用换行分割,即每个机制占用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!--使用sshfence隔离机制时需要ssh免登录-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--配置sshfence隔离机制超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!--配置失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--开启webHDFS-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!--设置重新进行健康检查的时间-->
<property>
<name>heartbeat.recheck.interval</name>
<value>2000</value>
</property>
<!--datanode会按照此间隙(单位是s)向namenode发送心跳,默认发送10次-->
<property>
<name>dfs.heartbeat.interval</name>
<value>1</value>
</property>
</configuration>
输出结果,如下图所示:
3、修改hadoop-env.sh配置文件
[root@hadoop01 hadoop]# vim hadoop-env.sh
export JAVA_HOME=/opt/install/java
输出结果,如下图所示:
4、修改slaves文件
[root@hadoop01 hadoop]# vim slaves
hadoop01
hadoop02
hadoop03
输出结果,如下图所示:
四、将配置好的文件分发给集群中其他节点
1、将hadoop的安装目录分发给集群中的其他节点
[root@hadoop01 hadoop]# cd /opt/install/
[root@hadoop01 install]# scp -r hadoop/ hadoop02:/opt/install/
[root@hadoop01 install]# scp -r hadoop/ hadoop03:/opt/install/
2、将配置好的环境变量分发给集群中的其他节点
[root@hadoop01 install]# scp /etc/profile hadoop02:/etc/
[root@hadoop01 install]# scp /etc/profile hadoop03:/etc/
五、创建配置文件中的所需目录
[root@hadoop01 install]# mkdir -p /data/hadoop/journal
[root@hadoop01 install]# mkdir -p /data/hadoop/namenode
[root@hadoop01 install]# mkdir -p /data/hadoop/datanode
[root@hadoop01 install]# mkdir -p /data/hadoop/tmp
六、启动管理日志的JournalNode
[root@hadoop01 install]# hadoop-daemon.sh start journalnode
[root@hadoop02 ]# hadoop-daemon.sh start journalnode
[root@hadoop03 ]# hadoop-daemon.sh start journalnode
七、格式化Namenode
1、在hadoop01节点上格式化Namenode
[root@hadoop01 install]# hdfs namenode -format
输出结果,如下图所示:
2、格式化成功后,在hadoop01节点上启动Namenode
[root@hadoop01 install]# hadoop-daemon.sh start namenode
输出结果,如下图所示:
八、在hadoop02上同步hadoop01的元数据
1、格式化hadoop02的Namenode,并同步hadoop01主节点的元数据信息
[root@hadoop02 install]# hdfs namenode -bootStrapStandby
输出结果,如下图所示:
2、启动hadoop02的NameNode节点
[root@hadoop02 install]# hadoop-daemon.sh start namenode
输出结果,如下图所示:
此时,我们可以通过web页面的形式观察namenode节点的状态
通过登录hadoop01可以看到,hadoop01此时为standby状态
登录hadoop02后,发现此时也同样为standby状态
九、zkfc对接hdfs,实现主备抢占
1、格式化zkfc
[root@hadoop01 install]# hdfs zkfc -formatZK
输出结果,如下图所示:
2、在hadoop01上启动zkfc
[root@hadoop01 install]# hadoop-daemon.sh start zkfc
输出结果,如下图所示:
3、在hadoop02上启动zkfc
[root@hadoop02 install]# hadoop-daemon.sh start zkfc
输出结果,如下图所示:
当zkfc启动成功后,再次刷新hadoop的web界面,并观察Namenode节点的状态,hadoop01的状态由原来的standby变为Active,成为主节点。
而hadoop02的状态则维持不变。
十、启动DataNode
所有节点启动DataNode节点
[root@hadoop01 install]# hadoop-daemons.sh start datanode
输出结果,如下图所示:
刷新web页面,单击“datanodes”标签