- 环境准备
- 规划集群
- 配置 HDFS-HA 集群
- 启动 HDFS-HA 集群
- 问题提出
(1)修改 IP
(2)修改主机名及主机名和 IP 地址的映射
(3)关闭防火墙
(4)ssh 免密登录
(5)安装 JDK,配置环境变量等
| hadoop102 | hadoop103 | hadoop104 |
|---|---|---|
| NameNode | NameNode | NameNode |
| JournalNode | JournalNode | JournalNode |
| DataNode | DataNode | DataNode |
JournalNode作用:NameNode之间相互通信!
配置 HDFS-HA 集群1)官方地址:http://hadoop.apache.org/
2)在 opt 目录下创建一个 ha 文件夹
[root@hadoop102 ~]$ cd /opt [root@hadoop102 opt]$ mkdir ha
3)将/opt/module/下的 hadoop-3.1.3 拷贝到/opt/ha 目录下(记得删除 data 和 log 目录)
[root@hadoop102 opt]$ cp -r /opt/module/hadoop-3.1.3 /opt/ha/
4)配置 core-site.xml
fs.defaultFS hdfs://mycluster hadoop.tmp.dir /opt/ha/hadoop-3.1.3/data
5)配置 hdfs-site.xml
dfs.namenode.name.dir file://${hadoop.tmp.dir}/name dfs.datanode.data.dir file://${hadoop.tmp.dir}/data dfs.journalnode.edits.dir ${hadoop.tmp.dir}/jn dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2,nn3 dfs.namenode.rpc-address.mycluster.nn1 hadoop102:8020 dfs.namenode.rpc-address.mycluster.nn2 hadoop103:8020 dfs.namenode.rpc-address.mycluster.nn3 hadoop104:8020 dfs.namenode.http-address.mycluster.nn1 hadoop102:9870 dfs.namenode.http-address.mycluster.nn2 hadoop103:9870 dfs.namenode.http-address.mycluster.nn3 hadoop104:9870 dfs.namenode.shared.edits.dir qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa
6)分发配置好的 hadoop 环境到其他节点
启动 HDFS-HA 集群1)将 HADOOP_HOME 环境变量更改到 HA 目录(三台机器)
[root@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
将 HADOOP_HOME 部分改为如下
#HADOOP_HOME export HADOOP_HOME=/opt/ha/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
去三台机器上 source 环境变量
[root@hadoop102 ~]$ source /etc/profile
2)在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务
[root@hadoop102 ~]$ hdfs --daemon start journalnode [root@hadoop103 ~]$ hdfs --daemon start journalnode [root@hadoop104 ~]$ hdfs --daemon start journalnode
3)在[nn1] (hadoop102)上,对其进行格式化,并启动
[root@hadoop102 ~]$ hdfs namenode -format [root@hadoop102 ~]$ hdfs --daemon start namenode
4)在[nn2]和[nn3] (hadoop103和hadoop104)上,同步 nn1 的元数据信息
[root@hadoop103 ~]$ hdfs namenode -bootstrapStandby [root@hadoop104 ~]$ hdfs namenode -bootstrapStandby
5)启动[nn2]和[nn3]
[root@hadoop103 ~]$ hdfs --daemon start namenode [root@hadoop104 ~]$ hdfs --daemon start namenode
6)查看 web 页面显示
102图
103图
104图
7)在所有节点上,启动 datanode
[root@hadoop102 ~]$ hdfs --daemon start datanode [root@hadoop103 ~]$ hdfs --daemon start datanode [root@hadoop104 ~]$ hdfs --daemon start datanode
8)将[nn1]切换为 Active
[root@hadoop102 ~]$ hdfs haadmin -transitionToActive nn1
9)查看是否 Active
[root@hadoop102 ~]$ hdfs haadmin -getServiceState nn1
客户端图
网页图
当hadoop102的 namenode挂掉了怎么办?
测试:
hadoop102 网页 :
此时hadoop 103 和 104 依然都是从节点
所以也就是说,当hadoop102 (主节点)挂掉了之后,103和104两个从节点并不会变成主节点,现在手动将hadoop103变成主节点尝试 (没有启动hadoop102的情况下)
结果显示,报错。现在我们将hadoop102中的NN启动,再次开始将hadoop103变成主节点尝试
[root@hadoop102 ~]$ hdfs --daemon start namenode
[root@hadoop103 ~]$ hdfs haadmin -transitionToActive nn2
结果成功
hadoop102 和 hadoop103 的网页图
所以结果就是,当一个节点挂掉之后,就算是手动模式启动其他节点,也要等挂掉的节点起来之后,才能去手动将其他节点的机器变成主节点。



