HA步骤
配置之前先拍摄快照(重要)
快照名称设置为 Zookeeper
-
配置免密登录
# 在node1节点执行 ssh-keygen -t rsa # 三次回车之后 ssh-copy-id node1 ssh-copy-id node2 ssh-copy-id master
-
关闭所有Hadoop
# 关闭Hadoop stop-all.sh
-
在core-site.xml中添加如下配置:
-- 注意需要将原先的9000修改成cluster <property> <name>fs.defaultFS</name> <!-- <value>hdfs://master:9000</value> --> <value>hdfs://cluster</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,node1:2181,node2:2181</value> </property>
-
在hdfs-site.xml中添加如下配置:
<!-- //////////////以下为HDFS HA的配置////////////// --> <!-- 指定hdfs的nameservices名称为mycluster --> <property> <name>dfs.nameservices</name> <value>cluster</value> </property> <!-- 指定cluster的两个namenode的名称分别为nn1,nn2 --> <property> <name>dfs.ha.namenodes.cluster</name> <value>master,node1</value> </property> <!-- 配置nn1,nn2的rpc通信端口 --> <property> <name>dfs.namenode.rpc-address.cluster.master</name> <value>master:8020</value> </property> <property> <name>dfs.namenode.rpc-address.cluster.node1</name> <value>node1:8020</value> </property> <!-- 配置nn1,nn2的http通信端口 --> <property> <name>dfs.namenode.http-address.cluster.master</name> <value>master:9870</value> </property> <property> <name>dfs.namenode.http-address.cluster.node1</name> <value>node1:9870</value> </property> <!-- 指定namenode元数据存储在journalnode中的路径 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;node1:8485;node2:8485/cluster</value> </property> <!-- 指定journalnode日志文件存储的路径 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/soft/hadoop-2.7.6/data/journal</value> </property> <!-- 指定HDFS客户端连接active namenode的java类 --> <property> <name>dfs.client.failover.proxy.provider.cluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制为ssh --> <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.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 关闭权限验证 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property>
-
在hadoop-env.sh添加环境变量配置
export HDFS_ZKFC_USER=root export HDFS_JOURNALNODE_USER=root
-
上传配置文件至master的 /usr/local/soft/hadoop-3.1.3/etc/hadoop 并分发其他节点
cd /usr/local/soft/hadoop-3.1.3/etc/hadoop scp hdfs-site.xml root@node1:`pwd` scp hdfs-site.xml root@node2:`pwd` scp core-site.xml root@node1:`pwd` scp core-site.xml root@node2:`pwd` scp hadoop-env.sh root@node1:`pwd` scp hadoop-env.sh root@node2:`pwd`
-
删除所有节点中的tmp目录
# 在master node1 node2 节点删除 rm -rf /usr/local/soft/hadoop-3.1.3/data
-
启动Zookeeper三台都需要启动
zkServer.sh start zkServer.sh status
-
配置node1、node2 环境变量添加 HADOOP_HOME
vim /etc/profile # 添加: # HADOOP_HOME export HADOOP_HOME=/usr/local/soft/hadoop-3.1.3 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH source /etc/profile
-
启动JN 存储hdfs元数据
三台JN上执行 启动命令: hadoop-daemon.sh start journalnode
-
格式化 在一台NN上执行(在master上执行)
hdfs namenode -format # 并启动NameNode hadoop-daemon.sh start namenode
-
执行同步 没有格式化的NN上执行 在另外一个namenode上面执行(在node1上执行)
hdfs namenode -bootstrapStandby
-
格式化ZK 在已经启动的namenode上面执行(在master上执行)
# 保证Zookeeper启动状态 hdfs zkfc -formatZK
-
启动整个集群
start-all.sh