配置文件
core-site.xml
<configuration> <!--多个namenode地址组装成一个集群,这里mycluster变量名是供hdfs-site.xml里文件援用的--> <property> <name>fs.defaultFS</name> <value>hdfs://gms-cluster</value> </property> <!--指定hadoop运行时产生文件的存储目录--> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-3.3.3/data</value> </property></configuration>
hdfs-site.xml
<configuration> <!--name node 数据存储目录--> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/name</value> </property> <!--data node 数据存储目录--> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/data</value> </property> <!--journal node 数据存储目录--> <property> <name>dfs.journalnode.edits.dir</name> <value>${hadoop.tmp.dir}/jn</value> </property> <!--集群名称--> <property> <name>dfs.nameservices</name> <value>gms-cluster</value> </property> <!--集群中的namenode都有哪些--> <property> <name>dfs.ha.namenodes.gms-cluster</name> <value>nn1,nn2,nn3</value> </property> <!--namenode 外部通信rpc地址--> <property> <name>dfs.namenode.rpc-address.gms-cluster.nn1</name> <value>hadoop-4:8020</value> </property> <property> <name>dfs.namenode.rpc-address.gms-cluster.nn2</name> <value>hadoop-5:8020</value> </property> <property> <name>dfs.namenode.rpc-address.gms-cluster.nn3</name> <value>hadoop-6:8020</value> </property> <!--namenode web拜访http地址--> <property> <name>dfs.namenode.http-address.gms-cluster.nn1</name> <value>hadoop-4:9870</value> </property> <property> <name>dfs.namenode.http-address.gms-cluster.nn2</name> <value>hadoop-5:9870</value> </property> <property> <name>dfs.namenode.http-address.gms-cluster.nn3</name> <value>hadoop-6:9870</value> </property> <!--指定namenode 元数据在JournalNode上的寄存地位--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop-4:8485;hadoop-5:8485;hadoop-6:8485/gms-cluster</value> </property> <!--拜访代理:client用于确定哪个namenode是active--> <!-- HA集群中,用户并不知道到底哪一台机器是active的,所以拜访的时候,间接拜访集群名称(gms-cluster),而后申请就会交给上面这个代理类,它会帮咱们找到以后的active并将拜访转发 --> <property> <name>dfs.client.failover.proxy.provider.gms-cluster</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.hafencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!--启用nn故障主动转移--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--指定hdfs正本数--> <property> <name>dfs.replication</name> <value>3</value> </property></configuration>
- 启动journal node(三台都启动)
hdfs --daemon start journalnode
- 任选一台,格式化name node
hdfs namenode -format
- 启动
hdfs --daemon start namenode
- 其余两台,同步主节点的name node数据
hdfs namenode -bootstrapStandby
- 其余两台,也启动name node
hdfs --daemon start namenode
- 三台的ip:9870都能失常拜访到hadoop的控制台,并且都是standby状态