(1)当NameNode所在服务器发生未知的异常(例如:服务器宕机)时,在NameNode被重新启动之前整个集群都将不可用。
(2)当NameNode所在服务器执行某些日常维护任务(例如:软件或硬件升级)后重启服务器时,同样会导致HDFS集群在一段时间内不可用。
[danger] 前提:在搭建HA高可用集群,请先确保Hadoop完全分布式环境已经搭建完毕
配置项:[nameservice ID]=lingnan,两个[name node ID]分别为nn1和nn2,名称可以随意取,只需要保持前后一致即可。
[info] (1)在bigdata1服务器操作:保持 hdfs-site.xml 原有的配置不变,再增加如下HA相关配置:
#配置文件目录:/data/module/hadoop-2.7.3/etc/hadoop
<property>
<name>dfs.nameservices</name>
<value>lingnan</value>
<description>指定nameservice ID的名称</description>
</property>
<property>
<name>dfs.ha.namenodes.lingnan</name>
<value>nn1,nn2</value>
<description>指定各个NameNode在nameservice中的唯一标识符</description>
</property>
<property>
<name>dfs.namenode.rpc-address.lingnan.nn1</name>
<value>bigdata1:8020</value>
<description>指定nn1 NameNode所监听的全限定RPC地址</description>
</property>
<property>
<name>dfs.namenode.rpc-address.lingnan.nn2</name>
<value>bigdata2:8020</value>
<description>指定nn2 NameNode所监听的全限定RPC地址</description>
</property>
<property>
<name>dfs.namenode.http-address.lingnan.nn1</name>
<value>bigdata1:50070</value>
<description>指定nn1 NameNode所监听的全限定HTTP地址</description>
</property>
<property>
<name>dfs.namenode.http-address.lingnan.nn2</name>
<value>bigdata2:50070</value>
<description>指定nn2 NameNode所监听的全限定HTTP地址</description>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://bigdata1:8485;bigdata2:8485;bigdata3:8485/lingnan</value>
<description>指定让NameNodes用来读写edits的Journal Nodes的RUI</description>
</property>
<property>
<name>dfs.client.failover.proxy.provider.lingnan</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>指定HDFS客户端联系Active NameNode所使用的Java类</description>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<description>故障转移时使用SSH登录Active NameNode并将其进程杀掉</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
<description>故障转移时SSH登录Active NameNode所使用的私钥文件路径</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
<description>故障转移时SSH登录的超时毫秒数</description>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/root/journaldata</value>
<description>指定edits在JournalNode 上存储的绝对路径</description>
</property>
[info] (2)在bigdata1服务器操作:保持 core-site.xml 其他的配置不变,仅将其中的 fs.defaultFS 配置修改一下:
#配置文件目录:/data/module/hadoop-2.7.3/etc/hadoop
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata1:9000</value>
</property>
#配置信息修改为以下
<property>
<name>fs.defaultFS</name>
<value>hdfs://lingnan</value>
</property>
[info] (3)拷贝bigdata1服务器的 hdfs-site.xml 和 core-site.xml 到bigdata2和bigdata3
# 1.进入配置文件目录
cd /data/module/hadoop-2.7.3/etc/hadoop
# 2.拷贝到 bigdata2
scp hdfs-site.xml 192.168.46.112:/data/module/hadoop-2.7.3/etc/hadoop
scp core-site.xml 192.168.46.112:/data/module/hadoop-2.7.3/etc/hadoop
# 3.拷贝到 bigdata3
scp hdfs-site.xml 192.168.46.113:/data/module/hadoop-2.7.3/etc/hadoop
scp core-site.xml 192.168.46.113:/data/module/hadoop-2.7.3/etc/hadoop
[info] (4)同步NameNodes
在完成了上述的配置之后,你需要按照以下流程操作来实现NameNodes之间的数据同步:
(1)三台主机分别启动:JournalNodes
(2)初始化同步NameNodes
(3)启动两个NameNode
[success] (1)在三台主机分别启动 JournalNode 进程(hdfs配置文件指定了三台)
#启动 JournalNode 进程命令
hadoop-daemon.sh start journalnode
#查看是否启动成功
jps
[success] (2)初始化同步NameNodes(同步之前先开启 journalnode)
# 1.分别登陆三台机器,清空/data/module/hadoop-2.7.3/data的内容
cd /data/module/hadoop-2.7.3/data
rm -rf ./*
# 2.格式化bigdata1的NameNode
hdfs namenode -format
# 2.在bigdata1启动Namenode
hadoop-daemon.sh start namenode
# 3.在未格式化的bigdata2同步bigdata1的元数据
hdfs namenode -bootstrapStandby
[success] (3)启动bigdata1和bigdata2的两个NameNode
# 1.bigdata1之前已经启动,现在只需要启动bigdata2的NameNode
hadoop-daemon.sh start namenode
[info] (5)设置HA NameNode的Active状态
# 按照上述配置启动的HA NameNode 都是Standby状态,需要使用 hdfs haadmin 管理命令将其中的一个切换为Active状态
hdfs haadmin -transitionToActive nn1
[info] (6)查看NameNode的状态(使用web或者命令行查看)
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
内容来源于网络,如有侵权,请联系作者删除!