五十八、Ubuntu搭建hadoopHA高可用(从零开始)(一)

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 五十八、Ubuntu搭建hadoopHA高可用(从零开始)(一)

环境准备


编号 主机名 类型 用户 IP
1

master

主节点 root 192.168.231.247
2

slave1

从节点 root 192.168.231.248
3


slave2

从节点 root
192.168.231.249

环境搭建


一、基础配置


       1、安装VMware tools


7.png

8.png

9.png


将其复制到桌面


10.png


11.png

12.png


        注:遇到提示按 '回车' 键,遇到 'yes/no' 输入yes


安装完成Tools后的效果如图


13.png


       2、修改root密码


14.png


        3、更新 apt,安装vim编译器


apt-get update
apt-get install vim

15.png


16.png


        注:vim 编译器相对于 vi 编译器 对用户来说更友好,使用便捷,且有高亮关键字的功能


       4、安装ssh服务


apt-get install openssh-server

17.png


        5、修改ssh配置文件,允许root远程登录


vim /etc/ssh/sshd_config

更改前:


18.png


更改后:


19.png


       注:将 prohibit-password  更改为  yes


       6、去掉初始询问


vi /etc/ssh/ssh_config

更改前:


20.png


更改后:


 21.png


       7、关闭防火墙


ufw disable
ufw status

22.png

       8、环境配置


(1)修改hosts文件


vim /etc/hosts

23.png


(2)添加环境变量


vim /etc/profile

24.png


(3)解压 jdk


tar -zxvf jdk1.8.0_221.tar.gz -C /usr/local/src/

重命名其名称为 jdk


mv jdk1.8.0_221 jdk

25.png


(4)hadoop配置


tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local/

重命名其名称为hadoop


mv hadoop-2.7.1 hadoop

26.png


在hadoop安装目录下创建 tmp 和 logs目录


27.png


在tmp目录下创建 data 和 name 和 journal 目录


28.png


进入hadoop配置文件目录进行修改配置文件


hadoop-env.sh        core-site.xml        hdfs-site.xml        mapred-site.xml        yarn-site.xml        yarn-env.sh        slaves


其中hadoop-env.sh 与 yarn-env.sh 只需要修改其中的 jdk 路径


hadoop-env.sh


29.png


yarn-env.sh

30.png

       注:yarn-env.sh 文件中jdk路径需要去掉注释,否则无法生效


core-site.xml


<configuration>
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
 </property>
 <property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/local/hadoop/tmp</value>
 </property>
 <property>
  <name>ha.zookeeper.quorum</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
 </property>
 <property>
  <name>ha.zookeeper.session-timeout.ms</name>
  <value>30000</value>
 <description>ms</description>
 </property>
 <property>
  <name>fs.trash.interval</name>
  <value>1440</value>
 </property>
</configuration>

hdfs-site.xml


<configuration>
 <property>
 <name>dfs.qjournal.start-segment.timeout.ms</name>
 <value>60000</value>
 </property>
 <property>
 <name>dfs.nameservices</name>
 <value>mycluster</value>
 </property>
 <property>
 <name>dfs.ha.namenodes.mycluster</name>
 <value>master,slave1</value>
 </property>
 <property>
 <name>dfs.namenode.rpc-address.mycluster.master</name>
 <value>master:9000</value>
 </property>
 <property>
 <name>dfs.namenode.rpc-address.mycluster.slave1</name>
 <value>slave1:9000</value>
 </property>
 <property>
 <name>dfs.namenode.http-address.mycluster.master</name>
 <value>master:50070</value>
 </property>
 <property>
 <name>dfs.namenode.http-address.mycluster.slave1</name>
 <value>slave1:50070</value>
 </property>
 <property>
 <name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
 </property>
 <property>
 <name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
 </property>
 <property>
 <name>dfs.ha.fencing.methods</name>
 <value>
 sshfence
 shell(/bin/true)
 </value>
 </property>
 <property>
 <name>dfs.permissions.enabled</name>
 <value>false</value>
 </property>
 <property>
 <name>dfs.support.append</name>
 <value>true</value>
 </property>
 <property>
 <name>dfs.ha.fencing.ssh.private-key-files</name>
 <value>/root/.ssh/id_rsa</value>
 </property>
 <property>
 <name>dfs.replication</name>
 <value>2</value>
 </property>
 <property>
 <name>dfs.namenode.name.dir</name>
 <value>/usr/local/hadoop/tmp/name</value>
 </property>
 <property>
 <name>dfs.datanode.data.dir</name>
 <value>/usr/local/hadoop/tmp/data</value>
 </property>
 <property>
 <name>dfs.journalnode.edits.dir</name>
 <value>/usr/local/hadoop/tmp/journal</value>
 </property>
 <property>
 <name>dfs.ha.automatic-failover.enabled</name>
 <value>true</value>
 </property>
 <property>
 <name>dfs.webhdfs.enabled</name>
 <value>true</value>
 </property>
 <property>
 <name>dfs.ha.fencing.ssh.connect-timeout</name>
 <value>30000</value>
 </property>
 <property>
 <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
 <value>60000</value>
 </property>
</configuration>

mapred-site.xml


<configuration>
 <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
 <property>
  <name>mapreduce.jobhistory.address</name>
  <value>master:10020</value>
 </property>
 <property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>master:19888</value>
 </property>
</configuration>

yarn-site.xml


<configuration>
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
 </property>
 <property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>yrc</value>
 </property>
 <property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
 </property>
 <property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>master</value>
 </property>
 <property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>slave1</value>
 </property>
 <property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
 </property>
 <property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
 </property>
 <property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>
 <property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>86400</value>
 </property>
 <property>
  <name>yarn.resourcemanager.recovery.enabled</name>
  <value>true</value>
 </property>
 <property>
  <name>yarn.resourcemanager.store.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
 </property>
</configuration>

slaves


master
slave1
slave2

(5)zookeeper配置


解压zookeeper


tar -zxvf zookeeper-3.4.8.tar.gz  -C /usr/local/src/

重命名其名称为zookeeper


mv zookeeper-3.4.8 zookeeper

在zookeeper安装目录下创建 logs 目录和 data 目录


31.png


在data目录下创建myid文件并写入内容 “1”


32.png


进入zookeeper/conf目录下,重命名 zoo_sample.cfg  为 zoo.cfg


33.png


编辑zoo.cfg文件


修改前:


34.png


修改后:


35.png


二、三台机器集群搭建


       1、关机状态下克隆出另外两台虚拟机


36.png

37.png

38.png

       2、三台机器分别修改静态IP


39.png

40.png


41.png

42.png


43.png



       3、重启三台机器网络服务


service networking restart

       4、内网与外网的检查


44.png


       5、三台机器分别修改其主机名


hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

       6、修改其他两台机器zookeeper/data/myid文件分别为2和3


45.png


46.png


47.png


       7、重启三台机器


reboot

       8、设置ssh免密


生成密钥


ssh-keygen -t rsa

48.png


分发密钥


ssh-copy-id 192.168.231.248
ssh-copy-id 192.168.231.249

49.png

       9、使三台机器的环境变量生效


source /etc/profile

       10、启动三台机器的zookeeper集群


bin/zkServer.sh start
bin/zkServer.sh status

50.png


51.png


52.png


       11、格式化zookeeper在HA中的状态


bin/hdfs zkfc -formatZK

53.png


        12、启动三台机器的 journalnode进程


sbin/hadoop-daemon.sh start journalnode

54.png

55.png


56.png


       13、格式化namenode


bin/hdfs namenode -format

57.png


58.png


       注:观察是否有报错信息,status是否为0,0即为初始化成功,1则报错,检查配置文件是否有误


       14、启动hadoop所有进程


sbin/start-all.sh

59.png


60.png

61.png

62.png


      15、格式化主从节点


复制namenode元数据到从节点


scp -r /usr/local/hadoop/tmp/* slave1:/usr/local/hadoop/tmp/
scp -r /usr/local/hadoop/tmp/* slave2:/usr/local/hadoop/tmp/


63.png

64.png


       注:由于之前namenode,datanode,journalnode的数据全部存放在hadoop/tmp目录下,所以直接复制 tmp 目录至从节点


       16、启动slave1的resourcemanager 和 namenode 进程


sbin/yarn-daemon.sh start resourcemanager
sbin/hadoop-daemon.sh start namenode


65.png

        17、访问 resourcemanager 和 namenode 的web页面


66.png

67.png


68.png



       18、杀死master端的namenode(模拟master宕机后HA的故障转移)


kill -9 (namenode进程号)

69.png


70.png


       注: 可见,在naster宕机后,slave自动接替了master的工作,成为活跃状态,此为HA 的故障转移机制


       19、重启master端的namenode进程,观察工作状态


sbin/hadoop-daemon.sh start namenode


71.png


72.png

73.png


        注:可见,在master重新恢复状态后,slave依然为active状态,master为备用状态


链接参考


Centos搭建hadoopHA高可用

https://blog.csdn.net/m0_54925305/article/details/121566611?spm=1001.2014.3001.5502


HadoopHA工作机制高可用理论

https://blog.csdn.net/m0_54925305/article/details/119838341?spm=1001.2014.3001.5502


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
Ubuntu Java 应用服务中间件
自己买的服务器Ubuntu上搭建tomcat详细步骤
一、选购服务器 1.这一步就不说了,主要是以下步骤; 2.登录服务器 我选用的登陆方式为FinalShell,你也可以用MobaXterm;
276 0
自己买的服务器Ubuntu上搭建tomcat详细步骤
|
编解码 Kubernetes Ubuntu
VirtualBox 仅主机网络配置,搭建Ubuntu系统
需要系统同时支持 x86_64 和 arm64。我们选择 Ubuntu 22.04 Jammy Jellyfish 桌面版(https://ubuntu.com/download/desktop),非常适合运行 Kubernetes,方便调试和测试。
440 0
VirtualBox 仅主机网络配置,搭建Ubuntu系统
|
存储 Ubuntu
Ubuntu用Apache2快速搭建一个HTTP文件服务器
Ubuntu用Apache2快速搭建一个HTTP文件服务器
500 0
|
Ubuntu Apache 数据库
基于Ubuntu搭建个人网盘-7
基于Ubuntu搭建个人网盘-7
187 0
基于Ubuntu搭建个人网盘-7
|
弹性计算 Ubuntu Linux
|
Ubuntu 安全
Ubuntu 20.04 搭建NFS文件系统
Ubuntu 20.04 搭建NFS文件系统
358 0
|
Ubuntu 开发工具 C语言
ubuntu 中 搭建 C编程环境
ubuntu 中 搭建 C编程环境
138 0
ubuntu 中 搭建 C编程环境
|
负载均衡 NoSQL 算法
Ubuntu搭建Redis集群
Ubuntu搭建Redis集群
373 0
Ubuntu搭建Redis集群
|
存储 Ubuntu Linux
基于Ubuntu搭建个人网盘-8
基于Ubuntu搭建个人网盘-8
484 0
基于Ubuntu搭建个人网盘-8
|
Ubuntu 关系型数据库 MySQL
基于Ubuntu搭建个人网盘-6
基于Ubuntu搭建个人网盘-6
180 0
基于Ubuntu搭建个人网盘-6