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/namehdfs/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高可用架构分布式环境搭建教程相关推荐

  1. Hadoop的HA机制原理解析,与HA高可用集群环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> Hadoop的HA工作机制示意图 下面我们开始搭建这一套高可用集群环境 hadoop2.0已经发布了稳定版本了,增加了很多特性 ...

  2. Hadoop HA 高可用集群搭建

    Hadoop HA 高可用集群搭建 一.首先配置集群信息 1 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 1 tar -zxvf zookeeper- ...

  3. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    一.服务器环境 主机名 IP 用户名 密码 安装目录 master 192.168.142.124 root xxx /usr/hadoop-2.6.5/ slave1 192.168.142.125 ...

  4. Kubernetes1.24版本高可用集群环境搭建(二进制方式)

    背景: 虽然kubeadm方式安装集群更加简单些,配置相对比较少,但是生产环境还是建议二进制的方式安装,因为二进制的方式kubernetes的kube-apiserver.kube-controlle ...

  5. Hadoop HA 高可用集群启动报错 Encountered exception loading fsimage 解决方案

    笔者在搭建好Hadoop HA 高可用集群启动时报如下错误,后面是解决方案. 报错信息: 2018-08-24 11:18:07,475 INFO org.apache.hadoop.hdfs.ser ...

  6. 最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程(二)

    继续上次的教程,这次安装hbase与hive.之前有同学反应百度网盘中没有hbase安装包,这次补上了,在上篇博客的网盘链接中已经有了,最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程 ...

  7. HA高可用完全分布式集群 HDFS搭建

    HDFS HA 需要 设置静态IP.安装 jdk.设置ssh无密码登录.安装zookeeper.安装hadoop. 在Hadoop2.X之前,Namenode是HDFS集群中可能发生单点故障的节点,每 ...

  8. (五)Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

    目录 一.目的及要求: 实验目的: 实验要求: 二.环境要求: 集群规划: 三.具体步骤: 项目一:Hadoop的基本安装配置 项目二:Hadoop高可用完全分布模式配置 项目三:同步安装和配置 项目 ...

  9. MySQL高可用架构-MMM环境部署记录

    MMM介绍 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管 ...

最新文章

  1. sql中like带参数的写法
  2. 根据 中序遍历 和 后序遍历构造树(Presentation)(C++)
  3. 学长毕业日记 :本科毕业论文写成博士论文的神操作20210312
  4. VTK:Utilities之PiecewiseFunction
  5. Struts 2常见应用
  6. 下一代大数据处理引擎,阿里云实时计算独享模式重磅发布
  7. Linux为什么受欢迎?
  8. Distances to Zero CodeForces - 803B (二分)
  9. 哪些因素会影响数据质量
  10. 华为hbase二级索引(secondary index)细节分析
  11. 单利计算与复利计算程序
  12. leetcode[541]反转字符串II/reverse string II 反转字符串考察对代码的掌控能力
  13. C#学习笔记(十八):数据结构和泛型
  14. masOS上使用Java 3D解决方案
  15. 关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事
  16. 背景与小鸟--FlappyBird游戏开发教程之二
  17. fliggy 十三姨
  18. html点击弹出登录注册表单提交代码
  19. FPGA模拟PS2接口的方法
  20. 腾讯云服务器入门使用-连接登录

热门文章

  1. 面试中常问的TOPK
  2. 酷壳网大神重要文章转载合集
  3. ST-FOC-02-测量无刷电机参数
  4. 石头剪子布蜥蜴史波克python_Python石头布剪刀蜥蜴斯波克饲养
  5. 一个老的游戏,据说全世界只有不到4000人可以走出这个房间--之“深红色房间”。...
  6. 比较叶绿体基因组提供海草适应性进化新见解
  7. IP代理池proxy,自建,免费,详细教程
  8. Adversarial Attack on Attackers: Post-Process to Mitigate Black-Box Score-Based Query Attacks
  9. Python一张足够大的纸,纸质厚度0.5,请问对折多少次,才能到达珠穆朗玛峰的高度。(珠峰最新数据:8844.43)
  10. 【Python】tkinter点击按钮后获取按钮本身