官方文档
https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Configuration_details
**
1.资源角色规划
**
**
2.配置
**
2.1对全分布式集群的备份,以后想用全分布式的话就把hadoop-full名字改成hadoop,程序就会读取了
cd /var/opt/hadoop-3.1.2/etc
cp -r hadoop hadoop-full
2.2修改hadoop-env.sh文件
进入到hadoop目录下的etc下(增加两个角色配置)
vi + hadoop-env.sh
注释掉SECONDARYNAMENODE那行
添加下面两行
export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
2.3修改core-site.xml文件
vi + core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/cjc/hadoop/ha</value> #设置hadoop文件的存储目录
<description>A base for other temporary directories.</description> #没了这个会启动不了NameNode
</property> #自己踩过的坑
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>slave2:2181,slave3:2181,slave4:2181</value>
</property>
<property>
<name>ipc.client.connect.max.retries</name>
<value>100</value>
<description>Indicates the number of retries a client will make to establish
a server connection.
</description>
</property>
<property>
<name>ipc.client.connect.retry.interval</name>
<value>10000</value>
</property>
2.4修改hdfs-site.xml文件
vi + hdfs-site.xml
property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.nameservices</name> #设置名字
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name> #设置NameNode个数,这里设置的是两个,
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name> #远程服务的调用
<value>master:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>slave2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name> #浏览器访问namenode配置的IP和地址
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name> #两个
<value>slave2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave2:8485;slave3:8485/mycluster</value> #journalnode设置为三个节点
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> #hdfs客户端找到NameNode,active类名的代理类
</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>/var/cjc/hadoop/ha/journalnodeDiary</value>
</property>
<property>
# 配置自动故障转移
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
保存退出
在hadoop3.1.2的etc的hadoop目录下运行此命令
scp core-site.xml hdfs-site.xml hadoop-env.sh slave2:pwd
把2改成3,4再来两次
pwd需要用``包着,CSDN的编辑器用`包着会变成代码块
把配置的几个文件分发到节点2,3,4,不用去一个个敲
**
3.安装zookeeper
**
3.1解压和配置zookeeper
根据资源配置可知zookeeper是安装在节点2,3,4的
tar xf zookeeper-3.4.6.tar.gz -C /var/opt/ #解压
vi + /etc/profile
加上这两行
export ZOOKEEPER_HOME=/var/opt/zookeeper-3.4.6
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
scp /etc/profile slave3:/etc/ #分发到slave3节点
scp /etc/profile slave4:/etc/ #分发到slave4节点
source /etc/profile #使配置文件生效
进入到zookeeper的conf目录
cp zoo_sample.cfg zoo.cfg #改名字
vi zoo.cfg #编辑zoo.cfg文件,主要改数据目录和配置zookeeper启动节点
dataDir=/var/opt/zk #zk的数据存储目录要改,目录自定义
#最下面添加下面三行
server.1=slave2:2888:3888
server.2=slave3:2888:3888
server.3=slave4:2888:3888
弄好保存退出
弄好配置文件后并不能运行zookeeper,需要生成一个ID文件
mkdir -p /var/opt/zk #02 03 04 节点都要创建
[root@slave02 ~]# echo 1 > /var/opt/zk/myid
[root@slave03 ~]# echo 2 > /var/opt/zk/myid
[root@slave04 ~]# echo 3 > /var/opt/zk/myid
1,2,3都是对应上面配置文件的。
什么都配好之后在命令行下打zkS,按下TAB会自动补全
zkServer.sh start #启动zookeeper,在2.3,4节点都要运行
jps一下看看是否有zookeeper的进程
**~~
4.启动journalnode
~~ **
hdfs --daemon start journalnode #在配置好的journalnode三个节点上分别跑起来
在master节点上格式化namenode
hdfs namenode -format
#master节点上启动namenode
hadoop-daemon.sh start namenode
jps查看进程
**
5.同步
**
在节点2运行此命令
hdfs namenode -bootstrapStandby #同步命令
cd /var/cjc/hadoop/ha/name/current
cat VERSION
可以看到clusterID是相同的
证明同步成功
这里曾经我的节点2的namenode不能启动,翻了日志,发现缺少了一个fsimage的文件,
解决办法:https://www.cnblogs.com/zy1234567/p/10643895.html
hdfs zkfc -formatZK #格式化zk
start-dfs.sh #启动集群
看到这些证明启动成功
浏览器运行地址
**
HA高可用搭建成功!
**