环境准备
1.下载hadoop-2.5.2、zookeeper-3.4.6和JDK1.8
2.准备九台设备,每台设备的安装内容如下表

3.安装JDK之后验证一下看看机器中是否安装了fuser,如果没有安装fuser可以之下yum install -y psmisc 安装fuser插件。注意:如果没有fuser插件,ZKFC无法正常工作。
4.在这九台设备中完成SSH免密码登录
安装Zookeeper集群
在master-3、slave-3-1和slave-3-2三台机器上安装zookeeper集群。在三台解压zookeeper到usr目录下。
1.拷贝conf目下的zoo_sample.cfg文件为zoo.cfg
2.在master-3机器中修改zoo.cfg文件:
修改dataDir为dataDir=/usr/zookeeper/data
添加一下代码到未见的末尾,用以定义三个机器的集群编号,IP地址、本地端口和集群通讯端口
server.1=master-3:2888:3888
server.2=slave-3-1:2888:3888
server.3=slave-3-2:2888:3888
在/usr/zookeeper/data目录下新建myid文件。
把以上操作在slave-3-1和slave-3-2中操作一遍。
3.把对应的集群编号放到/usr/zookeeper/myid文件中。例如master-3机器中的myid中写入1。
master-3中的/usr/zookeeper/myid文件中的值为1
slave-3-1中的/usr/zookeeper/myid文件中的值为2
slave-3-2中的/usr/zookeeper/myid文件中的值为3
4.启动zookeeper
分别在三台设备上执行./bin/zkServer.sh start命令
5.查看zookeeper状态,用以验证zookeeper集群是否成功
./bin/zkServer.sh status.
如果有两台设备显示Mode: follower,一台显示Mode: leader这表明集群安装成功
配置Hadoop文件
1.配置hdfs-site.xml文件:
<configuration>
<!-- 配置集群服务名称-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--
配置集群服务中的namenode节点名称为nn1和nn2
dfs.ha.namenodes.[服务名称]。
-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!--
配置所有NameNode节点的RPC通讯地址和端口
name:dfs.namenode.rpc-address.[服务名称].[节点名称]
value:[namenode主机的IP地址或主机名]:[端口号]默认端口为8020
-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master-1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>master-2:8020</value>
</property>
<!--
配置所有NameNode节点的HTTP通讯地址和端口
name:dfs.namenode.rpc-address.[服务名称].[节点名称]
value:[namenode主机的IP地址或主机名]:[端口号]默认端口为50070
-->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master-1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>master-2:50070</value>
</property>
<!--
配置所有JournalNode节点的访问地址,多个地址用';'分割
JournalNode的通讯协议为qjournal://
-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master-3:8485;slave-3-1:8485;slave-3-2:8485/mycluster</value>
</property>
<!--
配置ZKFC的配置脚本。该处为默认的配置
name:格式为dfs.client.failover.proxy.provider.[集群服务名称]
-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--
设置SSH私钥地址
-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!--
设置JournalNode节点中文件存储的目录。默认情况窜在/tmp目录下,如果不设置目录,机器重启后,edits数据会丢失
-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/hadoop/journal/node/local/data</value>
</property>
<!--
启动ZKFC的自动切换
-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
2.配置core-site.xml文件:
<configuration>
<!--配置 HDFS的访问路径-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!--配置Zookeeper访问地址,多个地址用逗号分隔-->
<property>
<name>ha.zookeeper.quorum</name>
<value>master-3:2181,slave-3-1:2181,slave-3-2:2181</value>
</property>
<!--配置HDFS本地存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/data</value>
</property>
</configuration>
3.修改slaves文件。在文件中加入DataNode节点的机器名称或IP地址,具体内容如下:
slave-1-1
slave-1-2
slave-2-1
slave-2-2
4.在master-1机器上配置好hdfs-site.xml、core-site.xml和slaves文件后,把这三个文件拷贝到其他八台机器。至此完成了九台设备中hdfs的配置。
启动JournalNode同步Edits
1.在JournalNode安装机器中执行hdfs-daemon.sh journalnode 启动JournalNode节点。
2.格式化NameNode;在其中一台NameNode中(master-1设备)执行hdfs namenode -format命令。完成格式化之后,该NameNode节点中的edits同步时JournalNode中。
3.同步另一个NameNode中的edits;执行hdfs namenode bootstrapStandby命令,完成另一个没有格式化的NameNode节点中edits文件的同步。
如果你需要加一个已经格式化的NameNode节点到集群中可以执行hdfs -initializeSharedEdits命令进行edit文件的同步。
至此,所有的NameNode节点已经完成了edits文件的同步。
配置ZKFC Node
1.停止所有启动的NameNode和JournalNode节点的服务
2.初始化HA状态到zookeeper;在master-1和master-2中执行hdfs zkfc -formatZK 命令初始化ZKFC。
启动并验证Hadoop
1.在master-1中启动Hadoop;./sbin/start-dfs.sh 启动hadoop.
2.在每个设备中执行jps命令,查看每个设备中启动的节点是否正常
3.在浏览器中访问master-1:50070和master-2:50070查看各个节点中NameNode的信息。
4.验证两个NameNode节点是否可以自动切换;在ActiveNameNode节点上执行./hadoop-daemon stop namenode命令停止NameNode服务。查看另一个NameNode是否处于Active状态。如果处于Active则表明HA集群搭建成功。
网友评论