Hadoop高可用集群

若HDFS集群中只配置了一个NameNode,那么当该NameNode所在的节点宕机,则整个HDFS就不能进行文件的上传和下载。

若YARN集群中只配置了一个ResourceManager,那么当该ResourceManager所在的节点宕机,则整个YARN就不能进行任务的计算。

*Hadoop依赖Zookeeper进行各个模块的HA配置,其中状态为Active的节点对外提供服务,而状态为StandBy的节点则只负责数据的同步,在必要时提供快速故障转移。

 

Hadoop各个模块剖析:https://www.cnblogs.com/funyoung/p/9889719.html

Hadoop集群管理:https://www.cnblogs.com/funyoung/p/9920828.html

 

 

2.HDFS HA集群

 

 

2.1 模型


当有两个NameNode时,提供哪个NameNode地址给客户端?

 

Hadoop高可用集群

 

1.Hadoop提供了NameService进程,其是NameNode的代理,维护NameNode列表并存储NameNode的状态,客户端直接访问的是NameService,NameService会将请求转发给当前状态为Active的NameNode。

2.当启动HDFS时,DataNode将同时向两个NameNode进行注册。

 

 

怎样发现NameNode无法提供服务以及如何进行NameNode间状态的切换?

Hadoop高可用集群

 



1.Hadoop提供了FailoverControllerActive和FailoverControllerStandBy两个进程用于NameNode的生命监控。

2.FailoverControllerActive和FailoverControllerStandBy会分别监控对应状态的NameNode,若NameNode无异常则定期向Zookeeper集群发送心跳,若在一定时间内Zookeeper集群没收到FailoverControllerActive发送的心跳,则认为此时状态为Active的NameNode已经无法对外提供服务,因此将状态为StandBy的NameNode切换为Active状态。

 

NameNode之间的数据如何进行同步和共享?

1.Hadoop提供了JournalNode用于存放NameNode中的编辑日志。

2.当激活的NameNode执行任何名称空间上的修改时,它将修改的记录保存到JournalNode集群中,备用的NameNode能够实时监控JournalNode集群中日志的变化,当监控到日志发生改变时会将其同步到本地。

 

*当状态为Active的NameNode无法对外提供服务时,Zookeeper将会自动的将处于StandBy状态的NameNode切换成Active。

 

 

2.2 HDFS HA高可用集群搭建

 

1.安装并配置Zookeeper集群

https://www.cnblogs.com/funyoung/p/8778106.html 

 

2.配置HDFS(hdfs-site.xml)

<configuration> <!-- 指定NameService的名称 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- 指定NameService下两个NameNode的名称 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!-- 分别指定NameNode的RPC通讯地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>192.168.1.80:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>192.168.1.81:8020</value> </property> <!-- 分别指定NameNode的Web监控页面地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>192.168.1.80:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>192.168.1.81:50070</value> </property> <!-- 指定NameNode编辑日志存储在JournalNode集群中的目录--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://192.168.1.80:8485;192.168.1.81:8485;192.168.1.82:8485/mycluster</value> </property> <!-- 指定JournalNode集群存放日志的目录--> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/hadoop/hadoop-2.9.0/journalnode</value> </property> <!-- 配置NameNode失败自动切换的方式--> <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>/root/.ssh/id_rsa</value> </property> <!-- 开启失败故障自动转移--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置Zookeeper地址--> <property> <name>ha.zookeeper.quorum</name> <value>192.168.1.80:2181,192.168.1.81:2181,192.168.1.82:2181</value> </property> <!-- 文件在HDFS中的备份数(小于等于NameNode) --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 关闭HDFS的访问权限 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- 指定一个配置文件,使NameNode过滤配置文件中指定的host --> <property> <name>dfs.hosts.exclude</name> <value>/usr/hadoop/hadoop-2.9.0/etc/hadoop/hdfs.exclude</value> </property> </configuration>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssxfz.html