HDFS HA 需要 设置静态IP、安装 jdk、设置ssh无密码登录、安装zookeeper、安装hadoop。

在Hadoop2.X之前,Namenode是HDFS集群中可能发生单点故障的节点,每个HDFS集群只有一个namenode,一旦这个节点不可用,则整个HDFS集群将处于不可用状态。

HDFS高可用(HA)方案就是为了解决上述问题而产生的,在HA HDFS集群中会同时运行两个Namenode,一个作为活动的Namenode(Active),一个作为备份的Namenode(Standby)。备份的Namenode的命名空间与活动的Namenode是实时同步的,所以当活动的Namenode发生故障而停止服务时,备份Namenode可以立即切换为活动状态,而不影响HDFS集群服务。

下面是大家过程,我将整个过程分步详细整理了,这样能够更详细的展示。

服务器名称 进程
hadoop01 QuorumPeerMain、NameNode、DataNode、JournalNode、ResourceManager、NodeManager、DFSZKFailoverController、
hadoop02 QuorumPeerMain、NameNode、DataNode、JournalNode、DFSZKFailoverController 、NodeManager
hadoop03 QuorumPeerMain、DataNode、JournalNode、NodeManager

1、设置静态IP

设置静态IP
https://blog.csdn.net/weixin_42119153/article/details/100124300#commentBox

2、安装jdk

安装jdk
https://blog.csdn.net/weixin_42119153/article/details/100125845

3、设置ssh无密码登录

普通hdfs集群实现链接里面的一台虚拟机(master即namenode所在机器)无密码登录其他虚拟机就可以,
搭建HA高可用需要其他的namenode所在机器也能够无密码登录其他虚拟机,所以要在另一台namenode上都重复下面的操作
设置ssh无密码登录
https://blog.csdn.net/weixin_42119153/article/details/100126037

4、安装zookeeper

1)新建zookeeper安装目录

[hadoop@hadoop01 app]$ mkdir zookeeper

2)将下载的安装包上传至目录下并解压

[hadoop@hadoop01 zookeeper]$ tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz

3)修该解压后的目录便于使用

[hadoop@hadoop01 zookeeper]$ mv apache-zookeeper-3.5.5-bin zookeeper3.5


4)在当前目录新建zkdata目录

[hadoop@hadoop01 zookeeper]$ mkdir zkdata

5)在zkdata目录新建myid文件并输入数据1

[hadoop@hadoop01 zkdata]$ vi myid


6)复制配置文件zoo_sample.cfg为zoo.cfg并编辑

[hadoop@hadoop01 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@hadoop01 conf]$ vi zoo.cfg

修改其中dataDir路径为zhdata并添加server

dataDir=/home/app/zookeeper/zkdata
server.1=192.168.146.210:2888:3888
server.2=192.168.146.211:2888:3888
server.3=192.168.146.212:2888:3888

上述三个server地址即三台虚拟机ip,第一个端口2888为QuorumPeerMain服务端口,3888端口为leader选举端口。
7)将整个zookeeper文件加scp到其他两台虚拟机同样位置,并分别修改myid文件内容为2,3

[hadoop@hadoop01 app]$scp -r zookeeper/ hadoop@hadoop02:/home/hadoop/app/hdfs/zookeeper/




8)因为三台虚拟机的zookeeper都需要启动,为了方便我们写在bin目录下一个启动三台虚拟机的shell脚本start-ZK.sh

[hadoop@hadoop01 bin]$ vi start-ZK.sh

#!/bin/bashecho "Starting zkServer ..."hostname="hadoop01 hadoop02 hadoop03"  #虚拟机名写自己的for name in $hostnamedossh $name "source /etc/profile; /home/app/zookeeper/zookeeper3.5/bin/zkServer.sh start"  #目录修改为自己的done


9)在bin目录下执行start-ZK.sh脚本,启动zookeeper集群

[hadoop@hadoop01 bin]$ sh start-ZK.sh


使用jps查看启动状态:

[hadoop@hadoop01 bin]$ jps


三台机器均启动成功,zookeeper安装配置完毕。

5、安装hadoop

1、解压hadoop-2.7.7.tar.gz

1)将下载的hadoop-2.7.7.tar.gz上传至/home/hadoop 目录
2)解压

[hadoop@hadoop01 ~]$ tar -zxvf  hadoop-2.7.7.tar.gz

解压完成:

3)使用 root 用户配置 hadoop 环境变量(三台机器都要配置)

[root@hadoop01 hadoop2.7]# vi /etc/profile


使配置生效

[root@hadoop01 hadoop]# source /etc/profile

4)配置hosts映射(三台机器都要配置)

[root@hadoop01 hadoop2.7]# vi /etc/hosts

2、配置 hadoop 文件中相应的文件

这里使用的是hadoop用户
需要配置的文件如下,core-site.xml、hadoop-env.sh、hdfs-site.xml、mapred-site.xml、yarn-site.xml 所有的文件配置均位于hadoop2.7.1/etc/hadoop下面,具体需要的配置如下:
1) 配置core-site.xml

[hadoop@hadoop01 hadoop]$ vi core-site.xml
<configuration><property><name>fs.defaultFS</name><value>hdfs://hf</value>  </property><property><name>hadoop.tmp.dir</name><value>/home/hadoop/app/hdfs/hadoop/hadoop-2.7.7/tmp</value></property><property><name>ha.zookeeper.quorum</name><value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value></property></configuration>


在/home/hadoop/app/hdfs/hadoop/hadoop-2.7.7/ 目录下新建文件夹tmp
注意:hadoop.tmp.dir是hadoop 文件系统依赖的配置文件。 默认是在 /tmp 目录下的,而这个目录下的文件,在Linux系统中,重启之后,很多都会被清空。所以我们要手动指定这写文件的保存目录。
这个目录路径要么不存在,hadoop启动的时候会自动帮我们创建;要么是一个空目录,不然在启动的时候会报错。

2)配置hadoop-env.sh

[hadoop@hadoop01 hadoop]$ vi hadoop-env.sh

设置 JAVA_HOME 为自己在系统中安装的 JDK 目录

3)配置hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file.
--><!-- Put site-specific property overrides in this file. --><configuration><property><name>dfs.namenode.name.dir</name><value>/home/hadoop/app/hdfs/hadoop/name</value></property><property><name>dfs.datanode.data.dir</name><value>/home/hadoop/app/hdfs/hadoop/data</value></property><property><name>dfs.replication</name><value>3</value></property><!--<property><name>dfs.namenode.secondary.http-address</name><value>hadoop02:50090</value></property>
--><!--指定hdfs的虚拟服务名--><property><name>dfs.nameservices</name><value>hf</value></property><!--指定hdfs的虚拟服务名下的namenode--><property><name>dfs.ha.namenodes.hf</name><value>namenode01,namenode02</value></property>
<!--指定namenode的内部通信地址--><property><name>dfs.namenode.rpc-address.hf.namenode1</name><value>hadoop01:9000</value></property><property><name>dfs.namenode.rpc-address.hf.namenode2</name><value>hadoop02:9000</value></property><!--指定namenode的web ui通信地址-->  <property><name>dfs.namenode.http-address.hf.namenode1</name><value>hadoop01:50070</value></property><property><name>dfs.namenode.http-address.hf.namenode2</name><value>hadoop02:50070</value></property><!--指定journalnode数据共享目录--><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/hf</value></property><!--存放journalnode本地存放目录--><property><name>dfs.journalnode.edits.dir</name><value>/home/hadoop/app/hdfs/hadoop/journaldata</value></property>
<!--开启namenode失败是否自动切换--><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!--指定namanode失败进行自动切换的主类--><property><name>dfs.client.failover.proxy.provider.hf</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property>
<!--指定脑裂时,采用某种方式杀死期中一个-->
<!--防止多个namenode,同active(脑裂)--><property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/hadoop/.ssh/id_rsa</value></property>  <property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property> </configuration>

4)配置mapred-site.xml

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

5)配置yarn-site.xml

<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>
</property><property><name>yarn.resourcemanager.address</name><value>hadoop01:8032</value>
</property><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop01:8030</value>
</property><property><name>yarn.log-aggregation-enable</name><value>true</value>
</property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>hadoop01:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>hadoop01:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>hadoop01:8088</value>
</property><!-- 开启RM高可用 --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!-- 指定RM的cluster id -->
<property><name>yarn.resourcemanager.cluster-id</name><value>yrc</value>
</property><!-- 指定RM的名字 -->
<property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value>
</property><!-- 分别指定RM的地址 -->
<property><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop01</value>
</property><property><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop02</value></property><!-- 分别指定RM的网络通信地址 --><property><name>yarn.resourcemanager.webapp.address.rm1</name><value>hadoop01:8088</value>
</property>
<!-- 分别指定RM的网络通信地址 -->
<property><name>yarn.resourcemanager.webapp.address.rm2</name><value>hadoop02:8088</value>
</property><!-- 指定zk集群地址 --><property><name>yarn.resourcemanager.zk-address</name><value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value></property>  </configuration>

6)配置/etc/hadoop目录下的slaves,删除默认的localhost,增加3个从节点

[hadoop@hadoop01 hadoop]$ vi slaves

3、将配置好的 hadoop 文件上传给其它两台机器

[hadoop@hadoop01 hadoop]$ scp -r hadoop-2.7.7/ hadoop@hadoop03:/home/hadoop/app/hdfs/hadoop
[hadoop@hadoop01 hadoop]$ scp -r hadoop-2.7.7/ hadoop@hadoop02:/home/hadoop/app/hdfs/hadoop

4、启动 hadoop

1)启动zk(三台)
因为没有配置zookeeper得环境变量,我把之前写的zookeeper得启动脚本放在hadoop启动脚本目录中,方便一起启用:
需要修改脚本权限为 755

[hadoop@hadoop01 bin]$ cp start-ZK.sh /home/hadoop/app/hdfs/hadoop/hadoop-2.7.7/sbin/start-ZK.sh
[hadoop@hadoop01 sbin]$ chmod 755  start-ZK.sh


启动zookeeper

[hadoop@hadoop01 bin]$ start-ZK.sh


jps查看进程

[root@hadoop01 bin]# jps

2)启动journalnode服务(三台)

[hadoop@hadoop01 bin]$ hadoop-daemon.sh start journalnode

jps查看

3)挑选两个namenode之中的一台来格式化

[hadoop@hadoop01 hadoop]$ hdfs namenode -format

4)然后启动namenode

[hadoop@hadoop01 hadoop]$ hadoop-daemon.sh start namenode

5)在另一台namenode的机子上拉取元数据

[hadoop@hadoop02 hadoop]$ hdfs namenode -bootstrapStandby


6)格式化zkfc(在两个namenode节点)

[hadoop@hadoop01 hadoop]$ hdfs zkfc -formatZK


7)启动集群

[hadoop@hadoop01 hadoop]$ start-all.sh


jps查看

完成安装!!!

注: 以后启动只需要执行start-ZK.sh 和 start-all.sh 即可!!!

HA高可用完全分布式集群 HDFS搭建相关推荐

  1. Redis practise(二)使用Docker部署Redis高可用,分布式集群

    思路 鉴于之间学习过的Docker一些基础知识,这次准备部署一个简单的分布式,高可用的redis集群,如下的拓扑 tuopu.png 下面介绍下,对于这张拓扑图而言,需要了解的一些基础概念. Redi ...

  2. 深入浅出百亿请求高可用Redis分布式集群

    摘要:作为noSql中的kv数据库的王者,redis以其高性能,低时延,丰富的数据结构备受开发者青睐,但是由于redis在水平伸缩性上受限,如何做到能够水平扩容,同时对业务无侵入性是很多使用redis ...

  3. RabbitMQ:使用Docker构建RabbitMQ高可用负载均衡集群

    目录 一.构建RabbitMQ集群 1. 启动多个RabbitMQ节点 2. 加入集群 3. 配置镜像队列 二.HAProxy负载均衡 1. 安装HAProxy 2. 配置HAProxy 3. 启动 ...

  4. Hadoop 2.8.5 完全分布式HA高可用安装(二)--环境搭建

    文章目录 概述 集群规划 安装ZK 安装 验证 安装配置Hadoop集群 配置Hadoop环境变量 hadoop-env.sh core-site.xml hdfs-site.xml yarn-sit ...

  5. 轻松实现基于Heartbeat的高可用web服务集群

    高可用集群就是为了保证某项服务能够时时在线,我们可以通过几个9来衡量一个高可用集群提供服务的稳定性,例如5个9的高可用集群必须保证服务一年在线的时间占99.999%,也就是说一年的时间中仅允许服务电线 ...

  6. RHCS套件实现高可用负载均衡集群(三)——共享存储

    注:此博文在博文"RHCS套件实现高可用负载均衡集群(二)"的基础上完成 实验开始前设置实验环境 target端配置--server3 [root@server3 ~]# yum ...

  7. 高可用的MongoDB集群

    高可用的MongoDB集群 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l  面向集合的存储:适合存储对象及JSON ...

  8. 百度可观测系列 | 如何构建亿级指标的高可用 TSDB 存储集群?

    [百度云原生导读]在前一篇<采集亿级别指标,Prometheus 集群方案这样设计中>,我们为大家介绍了针对针对亿级指标场景,百度云原生团队基于Prometheus 技术方案的研究,包括资 ...

  9. Redis 高可用之哨兵集群

    Redis 高可用之哨兵集群 前言 哨兵集群 启动并初始化 Sentinel 初始化 Sentinel 状态 初始化Sentinel监视的主服务器列表 创建连向主服务器的网络连接 获取主服务器信息 获 ...

最新文章

  1. 分析与设计(AD)简介(2)
  2. nginx配置访问图片路径(windows)
  3. I am the load of my word
  4. C语言程序设计输入x求函数y,C语言程序设计实践(OJ)-初识函数
  5. Rancher2.0中邮件通知的设置
  6. php怎么克隆,利用php怎么对对象进行克隆
  7. VS Code 的常用快捷键
  8. github怎么搜索开源的代码_5.2.PYTHON开发利器之使用VS Code+GitHub进行python开源项目开发...
  9. 不同用户同时并发测压_教你 7 招,迅速提高服务器并发能力!
  10. 写给人类的机器学习 四、神经网络和深度学习
  11. EL表达式(Exprission language)
  12. eclipse下使用hibernate tools实现hibernate逆向工程
  13. 让线程按顺序执行8种方法
  14. 记于开学两个星期...十九岁快乐!
  15. 纤维过滤器和石英砂过滤器的区别
  16. C++中的常用函数例如for_each、accumulate、unique等
  17. pd.read_excel
  18. 夏季必不能少六道凉拌菜
  19. 文献检索报告软件测试,文献检索报告及文献综述.doc
  20. 《花千骨》为何被批“脑残”还能创造收视神话?

热门文章

  1. SAP UI5 应用开发教程之一:Hello World
  2. 经过 Webpack 处理过的 SAP Spartacus main.js
  3. SAP Commerce Cloud JavaScript Storefront
  4. Scala里List(1,2,3)和(1,2,3)的区别
  5. SAP UI5 sap-ui-core.js的加载逻辑
  6. 如何使用点击超链接的方式打开Android手机上的应用
  7. 快速找到thtmlbUtil的定义位置
  8. 利用canvas绘制动态仪表盘
  9. nodejs debugging
  10. SAP CRM中间件Object出现wait状态的原因调试