配置文件
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状态
- 启动data node(三台)
hdfs --daemon start datanode
- 手动设置某个namenode节点为active
hdfs haadmin -transitionToActive --forcemanual nn2
配置ssh免密登录
生成公钥私钥ssh-keygen -t rsa
三个回车,会在/home/atguigu/.ssh
路径下生成id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的机器ssh-copy-id hadoop102
启停命令
停hdfs --daemon stop journalnode
hdfs --daemon stop namenode
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。