Hadoop-HA高可用架构分布式环境搭建教程
Hadoop-HA完全分布式系统搭建
为什么需要搭建HA版本
在hadoop1.x的架构中,是存在单点故障的,因为namenode节点只有一个,而namenode又是存储元数据的主节点,所以只要namenode宕机,不管有多少台datanode,将无法进行正常工作,除非namenode再次正常运行
1.x的架构如下:
2.xHA的架构如下;
2.xHA的主备数据同步如下:
部署文档:
准备至少三台服务器
| 主机 | 作用 | 工具| 信息|
| — | — | — |
| centos7 | NameNode | 待补充 | hadoop p:seclover |
| centos7 | standby | 待补充 |
| centos7 | datanode | 待补充 |
修改主机名称
vi /etc/hostname
假如此时我有三台服务器,那么三台的主机名称分别为:
master,standby,slave
加入我此时有四台服务器,两台namenode,两台datanode
master,standby,slave1,slave2
更多的以此类推…
修改完后重启服务器
修改hosts文件
192.168.160.1 master #ip地址+主机名称
192.168.160.2 slave
192.168.160.3 standby
关闭所有的防火墙
systemctl status firewalld
#查看防火墙状态
systemctl stop firewalld
#关闭防火墙
systemctl disable firewalld
#开机禁用
修改时区
把机器的时区统一
timedatectl set-timezone Asia/Shanghai
创建用户
创建
adduser username
设置密码
passwd username
设置免密登录
切换到新建的用户
su hadoop
一直回车即可
ssh-keygen –t rsa
有多少个节点就要copy多少节点
ssh-copy-id hostname
验证
ssh slave
退出
exit
如果忽略此步骤,后续节点通信的过程需要手动输入密码
所有的服务器都同上
安装注意事项:
不同节点的安装包目录要保持一致
提前给创建的用户操作服务安装目录的权限
chown -R username:username /目录
# 赋予安装目录权限
chown -R username:username /root/
#这个目录的权限一定要给,不然后续节点通过ssh通信可能会异常
建议:
/opt/software/...存放压缩包
/opt/modules/...存放安装包
所有节点安装JDK
解压安装包到 /opt/modules
在/etc/profile/文件追加
export JAVA_HOME="jdk安装路径"
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile #生效配置文件
java -version #验证配置是否生效
所有节点安装zookeeper
解压安装包到 /opt/modules
修改zookeeper配置文件
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改data 目录:
dataDir=/opt/modules/zookeeper-3.4.14/data
dataLogDir=/opt/modules/zookeeper-3.4.14/datalog
末尾追加server配置信息server.1=master:2888:3888
server.2=standby:2888:3888
server.3=slave:2888:3888
ps:
2181表示客户端端口号
2888表示ZK节点内部通信端口号
3888表示ZK内部选举端口号
手动创建dataDir和dataLogDir文件夹
并在dataDir下创建myid文件,在master输入1
把zookeeper复制到其他的所有节点服务器
scp -r zk安装目录 hostname:目标目录
修改myid文件,standby的话就输入2
echo 1 >/data/myid
slave输入3
以此类推…
至此把所有节点启动测试即可
zkServer.sh start
zkServer.sh status
jps
如果正常运行则如下:一个leader节点,两个follower节点
Mode: follower
Mode: leader
Mode: follower
所有节点安装配置hadoop
解压安装包到 /opt/modules
修改以下三个文件中的jdk目录
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
export JAVA_HOME=jdk安装目录
修改core-site.xml
<property><name>fs.defaultFS</name><value>hdfs://ns1</value></property><property> <name>hadoop.tmp.dir</name><value>file:///opt/modules/hadoop-2.5.0/data/tmp</value></property><property><name>hadoop.http.staticuser.user</name><value>hadoop</value></property><property> <name>ha.zookeeper.quorum</name> <value>slave:2181</value> </property>
修改 hdfs-site.xml
<configuration><!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 --><property><name>dfs.nameservices</name><value>ns</value></property><!-- ns下面有两个NameNode,分别是nn1,nn2 --><property><name>dfs.ha.namenodes.ns</name><value>nn1,nn2</value></property><!-- nn1的RPC通信地址 --><property><name>dfs.namenode.rpc-address.ns.nn1</name><value>master:9000</value></property><!-- nn1的http通信地址 --><property><name>dfs.namenode.http-address.ns.nn1</name><value>master:50070</value></property><!-- nn2的RPC通信地址 --><property><name>dfs.namenode.rpc-address.ns.nn2</name><value>standby:9000</value></property><!-- nn2的http通信地址 --><property><name>dfs.namenode.http-address.ns.nn2</name><value>standby:50070</value></property><!-- 指定NameNode的元数据在JournalNode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://master:8485;standby:8485;slave:8485/ns</value></property><!-- 指定JournalNode在本地磁盘存放数据的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/opt/modules/hadoop-2.6.5/journal</value></property><!-- 开启NameNode故障时自动切换 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 配置失败自动切换实现方式 --><property><name>dfs.client.failover.proxy.provider.ns</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.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><property><name>dfs.namenode.name.dir</name><value>/opt/modules/hadoop-2.6.5/hdfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>/opt/modules/hadoop-2.6.5/hdfs/data</value></property><property><name>dfs.replication</name><value>2</value></property><!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 --><property><name>dfs.webhdfs.enabled</name><value>true</value></property>
</configuration>
修改mapred-site.xml
<configuration><property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
</configuration>
修改 yarn-site.xml
<configuration><!-- 指定nodemanager启动时加载server的方式为shuffle server --><property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定resourcemanager地址 --><property><name>yarn.resourcemanager.hostname</name><value>slave</value></property>
</configuration>
修改slaves
master
standby
slave
把hadoop复制到其他所有环境
scp -r [hadoop安装目录] [hostname]:[目标目录]
注意:
在hadoop目录下手动
创建journal
目录
创建hdfs/name
和hdfs/data
目录
启动环境:
启动zookeeper [如果之前启动过此步骤请忽略]
启动journalnode(主备数据数据异步线程)集群
1.在master节点启动
hadoop/sbin/hadoop-daemons.sh start journalnode
2.在所有节点验证:
jps
JournalNode #如果有此进程则代表成功
3.如果有某个节点未发现该进程,请在当前节点hadoop/sbin
目录下重新执行该命令
格式化zkfc,在zookeeper中生成ha节点
1.在master节点执行:[切勿copy,请手动输入以下命令]
hadoop/bin/hdfs zkfc –formatZK
zkfc是什么? ZooKeeperFailoverController 它是什么?是Hadoop中通过ZK实现FC功能的一个实用工具主要作用:作为一个ZK集群的客户端,用来监控NN的状态信息 谁会用它?每个运行NN的节点必须要运行一个zkfc
格式化hdfs
1.在master节点执行:[切勿copy,请手动输入以下命令]
hadoop namenode –format
启动namenode
1.在master节点启动namenode,启动active状态
hadoop/sbin/hadoop-daemon.sh start namenode
启动备用节点standby
1.在standby节点执行
同步master数据
hadoop/bin/hdfs namenode -bootstrapStandby
2.启动备份节点
hadoop-daemon.sh start namenode
启动datanode
1.在master节点执行
hadoop/sbin/hadoop-daemons.sh start datanode
2.jps进行验证,如果包含NameNode
进程则代表成功
启动yarn
1.在slave节点执行
hadoop/sbin/start-yarn.sh
启动zkfc
1.在master节点执行
hadoop/sbin/hadoop-daemons.sh start zkfc
以上如果全部启动后,请最后进行一次检验
master节点执行 jps
,正常返回如下:
3914 DFSZKFailoverController
3557 DataNode
4081 NameNode
2552 QuorumPeerMain
3357 JournalNode
3669 NodeManager
5716 Jps
standby节点执行 jps
,正常返回如下:
3719 NameNode
3129 DataNode
6543 Jps
2460 QuorumPeerMain
3451 DFSZKFailoverController
3241 NodeManager
3025 JournalNode
slave节点执行jps
,正常返回如下
19346 QuorumPeerMain
24324 JournalNode
26789 Jps
24086 DataNode
24632 NodeManager
24524 ResourceManager
验证
打开chrome浏览器
输入:master:50070
输入:standby:50070
查看两个节点的状态
打开ssh,手动停止master节点的namenode,模拟宕机
hadoop-daemon.sh stop namenode
再次打开界面后,master页面无法访问,standby节点变为active状态,代表ha搭建成功
再次手动启动master节点namenode后,页面可以访问,但仍是standby状态,
直到standby节点挂掉后,才会切换为active状态
Hadoop-HA高可用架构分布式环境搭建教程相关推荐
- Hadoop的HA机制原理解析,与HA高可用集群环境搭建
2019独角兽企业重金招聘Python工程师标准>>> Hadoop的HA工作机制示意图 下面我们开始搭建这一套高可用集群环境 hadoop2.0已经发布了稳定版本了,增加了很多特性 ...
- Hadoop HA 高可用集群搭建
Hadoop HA 高可用集群搭建 一.首先配置集群信息 1 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 1 tar -zxvf zookeeper- ...
- Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)
一.服务器环境 主机名 IP 用户名 密码 安装目录 master 192.168.142.124 root xxx /usr/hadoop-2.6.5/ slave1 192.168.142.125 ...
- Kubernetes1.24版本高可用集群环境搭建(二进制方式)
背景: 虽然kubeadm方式安装集群更加简单些,配置相对比较少,但是生产环境还是建议二进制的方式安装,因为二进制的方式kubernetes的kube-apiserver.kube-controlle ...
- Hadoop HA 高可用集群启动报错 Encountered exception loading fsimage 解决方案
笔者在搭建好Hadoop HA 高可用集群启动时报如下错误,后面是解决方案. 报错信息: 2018-08-24 11:18:07,475 INFO org.apache.hadoop.hdfs.ser ...
- 最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程(二)
继续上次的教程,这次安装hbase与hive.之前有同学反应百度网盘中没有hbase安装包,这次补上了,在上篇博客的网盘链接中已经有了,最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程 ...
- HA高可用完全分布式集群 HDFS搭建
HDFS HA 需要 设置静态IP.安装 jdk.设置ssh无密码登录.安装zookeeper.安装hadoop. 在Hadoop2.X之前,Namenode是HDFS集群中可能发生单点故障的节点,每 ...
- (五)Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装
目录 一.目的及要求: 实验目的: 实验要求: 二.环境要求: 集群规划: 三.具体步骤: 项目一:Hadoop的基本安装配置 项目二:Hadoop高可用完全分布模式配置 项目三:同步安装和配置 项目 ...
- MySQL高可用架构-MMM环境部署记录
MMM介绍 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管 ...
最新文章
- sql中like带参数的写法
- 根据 中序遍历 和 后序遍历构造树(Presentation)(C++)
- 学长毕业日记 :本科毕业论文写成博士论文的神操作20210312
- VTK:Utilities之PiecewiseFunction
- Struts 2常见应用
- 下一代大数据处理引擎,阿里云实时计算独享模式重磅发布
- Linux为什么受欢迎?
- Distances to Zero CodeForces - 803B (二分)
- 哪些因素会影响数据质量
- 华为hbase二级索引(secondary index)细节分析
- 单利计算与复利计算程序
- leetcode[541]反转字符串II/reverse string II 反转字符串考察对代码的掌控能力
- C#学习笔记(十八):数据结构和泛型
- masOS上使用Java 3D解决方案
- 关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事
- 背景与小鸟--FlappyBird游戏开发教程之二
- fliggy 十三姨
- html点击弹出登录注册表单提交代码
- FPGA模拟PS2接口的方法
- 腾讯云服务器入门使用-连接登录
热门文章
- 面试中常问的TOPK
- 酷壳网大神重要文章转载合集
- ST-FOC-02-测量无刷电机参数
- 石头剪子布蜥蜴史波克python_Python石头布剪刀蜥蜴斯波克饲养
- 一个老的游戏,据说全世界只有不到4000人可以走出这个房间--之“深红色房间”。...
- 比较叶绿体基因组提供海草适应性进化新见解
- IP代理池proxy,自建,免费,详细教程
- Adversarial Attack on Attackers: Post-Process to Mitigate Black-Box Score-Based Query Attacks
- Python一张足够大的纸,纸质厚度0.5,请问对折多少次,才能到达珠穆朗玛峰的高度。(珠峰最新数据:8844.43)
- 【Python】tkinter点击按钮后获取按钮本身