进程介绍
| 1. Zkfc(ZKFailoverController)作用: |
| 切换NN状态; |
| 对NN进行心跳保持(监听),当发现NN active异常,会通知Zookeeper,然后ZK重新选举一个新的NN接管,切换成NN active状态; |
| |
| 2. JournalNode |
| NameNode之间共享数据. |
| 两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。 |
集群
node1 |
node2 |
node3 |
NameNode |
NameNode |
- |
JournalNode |
JournalNode |
JournalNode |
DataNode |
DataNode |
DataNode |
ZK |
ZK |
ZK |
ResourceManager |
|
|
NodeManager |
NodeManager |
NodeManager |
hadoop-env.sh[三个节点]
| export JAVA_HOME=/opt/app/jdk1.8.0_321 |
core-site.xml[三个节点]
| <configuration> |
| |
| |
| <property> |
| <name>fs.defaultFS</name> |
| <value>hdfs://HadoopCluster</value> |
| </property> |
| |
| <property> |
| <name>hadoop.tmp.dir</name> |
| <value>/opt/app/hadoop-2.8.5/metaData</value> |
| </property> |
| <property> |
| <name>ha.zookeeper.quorum</name> |
| <value>node1:2181,node2:2181,node3:2181</value> |
| </property> |
| </configuration> |
hdfs-site.xml[三个节点]
| <configuration> |
| <property> |
| <name>dfs.replication</name> |
| <value>3</value> |
| </property> |
| |
| <property> |
| <name>dfs.namenode.secondary.http-address</name> |
| <value>node3:50090</value> |
| </property> |
| |
| <property> |
| <name>dfs.nameservices</name> |
| <value>HadoopCluster</value> |
| </property> |
| |
| <property> |
| <name>dfs.ha.namenodes.HadoopCluster</name> |
| <value>nn1,nn2</value> |
| </property> |
| |
| <property> |
| <name>dfs.namenode.rpc-address.HadoopCluster.nn1</name> |
| <value>node1:9000</value> |
| </property> |
| |
| <property> |
| <name>dfs.namenode.rpc-address.HadoopCluster.nn2</name> |
| <value>node2:9000</value> |
| </property> |
| |
| <property> |
| <name>dfs.namenode.http-address.HadoopCluster.nn1</name> |
| <value>node1:50070</value> |
| </property> |
| |
| <property> |
| <name>dfs.namenode.http-address.HadoopCluster.nn2</name> |
| <value>node2:50070</value> |
| </property> |
| |
| <property> |
| <name>dfs.namenode.shared.edits.dir</name> |
| <value>qjournal://node1:8485;node2:8485;node3:8485/HadoopCluster</value> |
| </property> |
| |
| <property> |
| <name>dfs.ha.fencing.methods</name> |
| <value>sshfence</value> |
| </property> |
| |
| <property> |
| <name>dfs.ha.fencing.ssh.private-key-files</name> |
| <value>/root/.ssh/id_rsa</value> |
| </property> |
| |
| <property> |
| <name>dfs.journalnode.edits.dir</name> |
| <value>/opt/app/hadoop/journalnodeData</value> |
| </property> |
| |
| <property> |
| <name>dfs.permissions.enable</name> |
| <value>false</value> |
| </property> |
| |
| <property> |
| <name>dfs.client.failover.proxy.provider.HadoopCluster</name> |
| <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> |
| </property> |
| <property> |
| <name>dfs.ha.automatic-failover.enabled</name> |
| <value>true</value> |
| </property> |
| </configuration> |
启动zookeeper
启动journalnode服务[三个节点]
| hadoop-daemon.sh start journalnode |
| |
格式化namenode[node1节点]
| hdfs namenode -format |
| hadoop-daemon.sh start namenode |
node2同步node1的元数据信息[node2节点]
| hdfs namenode -bootstrapStandby |
| |
启动namenode[node2节点]
| hadoop-daemon.sh start namenode |
启动datanode[三个节点]
| hadoop-daemons.sh start datanode |
关闭所有HDFS服务[node1节点]
初始化HA在Zookeeper中状态[node1节点]
启动HDFS服务[node1节点]
启动后的进程
| [root@node1 hadoop] |
| 5152 DataNode |
| 6340 JournalNode |
| 6820 Jps |
| 4552 QuorumPeerMain |
| 6061 NameNode |
| 6509 DFSZKFailoverController |
| |
| [root@node2 hadoop-2.8.5] |
| 4259 DFSZKFailoverController |
| 3673 DataNode |
| 4155 JournalNode |
| 3228 QuorumPeerMain |
| 4015 NameNode |
| 4751 Jps |
| |
| [root@node3 hadoop-2.8.5] |
| 5456 JournalNode |
| 5362 DataNode |
| 4773 QuorumPeerMain |
| 5640 Jps |
HA集群配置成功后,还得需要安装一个软件才能让standby节点变为active节点---HADOOP的集群都安装一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通