本文源码:GitHub·点这里 || GitEE·点这里

一、HDFS高可用

1、基础描述

在单点或者少数节点故障的情况下,集群还可以正常的提供服务,HDFS高可用机制可以通过配置Active/Standby两个NameNodes节点实现在集群中对NameNode的热备来消除单节点故障问题,如果单个节点出现故障,可通过该方式将NameNode快速切换到另外一个节点上。

2、机制详解

  • 基于两个NameNode做高可用,依赖共享Edits文件和Zookeeper集群;
  • 每个NameNode节点配置一个ZKfailover进程,负责监控所在NameNode节点状态;
  • NameNode与ZooKeeper集群维护一个持久会话;
  • 如果Active节点故障停机,ZooKeeper通知Standby状态的NameNode节点;
  • 在ZKfailover进程检测并确认故障节点无法工作后;
  • ZKfailover通知Standby状态的NameNode节点切换为Active状态继续服务;

ZooKeeper在大数据体系中非常重要,协调不同组件的工作,维护并传递数据,例如上述高可用下自动故障转移就依赖于ZooKeeper组件。

二、HDFS高可用

1、整体配置

服务列表 HDFS文件 YARN调度 单服务 共享文件 Zk集群
hop01 DataNode NodeManager NameNode JournalNode ZK-hop01
hop02 DataNode NodeManager ResourceManager JournalNode ZK-hop02
hop03 DataNode NodeManager SecondaryNameNode JournalNode ZK-hop03

2、配置JournalNode

创建目录

[root@hop01 opt]# mkdir hopHA

拷贝Hadoop目录

cp -r /opt/hadoop2.7/ /opt/hopHA/

配置core-site.xml

<configuration><!-- NameNode集群模式 --><property><name>fs.defaultFS</name><value>hdfs://mycluster</value></property><!-- 指定hadoop运行时产生文件的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/hopHA/hadoop2.7/data/tmp</value></property>
</configuration>

配置hdfs-site.xml,添加内容如下

<!-- 分布式集群名称 -->
<property><name>dfs.nameservices</name><value>mycluster</value>
</property><!-- 集群中NameNode节点 -->
<property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value>
</property><!-- NN1 RPC通信地址 -->
<property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>hop01:9000</value>
</property><!-- NN2 RPC通信地址 -->
<property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>hop02:9000</value>
</property><!-- NN1 Http通信地址 -->
<property><name>dfs.namenode.http-address.mycluster.nn1</name><value>hop01:50070</value>
</property><!-- NN2 Http通信地址 -->
<property><name>dfs.namenode.http-address.mycluster.nn2</name><value>hop02:50070</value>
</property><!-- 指定NameNode元数据在JournalNode上的存放位置 -->
<property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hop01:8485;hop02:8485;hop03:8485/mycluster</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><!-- 声明journalnode服务器存储目录-->
<property><name>dfs.journalnode.edits.dir</name><value>/opt/hopHA/hadoop2.7/data/jn</value>
</property><!-- 关闭权限检查-->
<property><name>dfs.permissions.enable</name><value>false</value>
</property><!-- 访问代理类失败自动切换实现方式-->
<property><name>dfs.client.failover.proxy.provider.mycluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

依次启动journalnode服务

[root@hop01 hadoop2.7]# pwd
/opt/hopHA/hadoop2.7
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start journalnode

删除hopHA下数据

[root@hop01 hadoop2.7]# rm -rf data/ logs/

NN1格式化并启动NameNode

[root@hop01 hadoop2.7]# pwd
/opt/hopHA/hadoop2.7
bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode

NN2同步NN1数据

[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby

NN2启动NameNode

[root@hop02 hadoop2.7]# sbin/hadoop-daemon.sh start namenode

查看当前状态

在NN1上启动全部DataNode

[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode

NN1切换为Active状态

[root@hop01 hadoop2.7]# bin/hdfs haadmin -transitionToActive nn1
[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active

3、故障转移配置

配置hdfs-site.xml,新增内容如下,同步集群

<property><name>dfs.ha.automatic-failover.enabled</name><value>true</value>
</property>

配置core-site.xml,新增内容如下,同步集群

<property><name>ha.zookeeper.quorum</name><value>hop01:2181,hop02:2181,hop03:2181</value>
</property>

关闭全部HDFS服务

[root@hop01 hadoop2.7]# sbin/stop-dfs.sh

启动Zookeeper集群

/opt/zookeeper3.4/bin/zkServer.sh start

hop01初始化HA在Zookeeper中状态

[root@hop01 hadoop2.7]# bin/hdfs zkfc -formatZK

hop01启动HDFS服务

[root@hop01 hadoop2.7]# sbin/start-dfs.sh

NameNode节点启动ZKFailover

这里hop01和hop02先启动的服务状态就是Active,这里先启动hop02。

[hadoop2.7]# sbin/hadoop-daemon.sh start zkfc

结束hop02的NameNode进程

kill -9 14422

等待一下查看hop01状态

[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active

三、YARN高可用

1、基础描述

基本流程和思路与HDFS机制类似,依赖Zookeeper集群,当Active节点故障时,Standby节点会切换为Active状态持续服务。

2、配置详解

环境同样基于hop01和hop02来演示。

配置yarn-site.xml,同步集群下服务

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!--启用HA机制--><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!--声明Resourcemanager服务--><property><name>yarn.resourcemanager.cluster-id</name><value>cluster-yarn01</value></property><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><property><name>yarn.resourcemanager.hostname.rm1</name><value>hop01</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>hop02</value></property><!--Zookeeper集群的地址--> <property><name>yarn.resourcemanager.zk-address</name><value>hop01:2181,hop02:2181,hop03:2181</value></property><!--启用自动恢复机制--> <property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value></property><!--指定状态存储Zookeeper集群--> <property><name>yarn.resourcemanager.store.class</name>     <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value></property></configuration>

重启journalnode节点

sbin/hadoop-daemon.sh start journalnode

在NN1服务格式化并启动

[root@hop01 hadoop2.7]# bin/hdfs namenode -format
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start namenode

NN2上同步NN1元数据

[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby

启动集群下DataNode

[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode

NN1设置为Active状态

先启动hop01即可,然后启动hop02。

[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start zkfc

hop01启动yarn

[root@hop01 hadoop2.7]# sbin/start-yarn.sh

hop02启动ResourceManager

[root@hop02 hadoop2.7]# sbin/yarn-daemon.sh start resourcemanager

查看状态

[root@hop01 hadoop2.7]# bin/yarn rmadmin -getServiceState rm1

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent

推荐阅读:编程体系整理

序号 项目名称 GitHub地址 GitEE地址 推荐指数
01 Java描述设计模式,算法,数据结构 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
02 Java基础、并发、面向对象、Web开发 GitHub·点这里 GitEE·点这里 ☆☆☆☆
03 SpringCloud微服务基础组件案例详解 GitHub·点这里 GitEE·点这里 ☆☆☆
04 SpringCloud微服务架构实战综合案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
05 SpringBoot框架基础应用入门到进阶 GitHub·点这里 GitEE·点这里 ☆☆☆☆
06 SpringBoot框架整合开发常用中间件 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
07 数据管理、分布式、架构设计基础案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
08 大数据系列、存储、组件、计算等框架 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆

Hadoop框架:HDFS高可用环境配置相关推荐

  1. hadoop namenode启动不了_Hadoop框架:HDFS高可用环境配置

    一.HDFS高可用 1.基础描述 在单点或者少数节点故障的情况下,集群还可以正常的提供服务,HDFS高可用机制可以通过配置Active/Standby两个NameNodes节点实现在集群中对NameN ...

  2. hadoop 单机单间_零基础入门hadoop大数据四——Hadoop框架前奏,JDK环境配置

    ~~~~~~~~~一天更新两篇~~~~~~ 一.本章节完成的内容 1.使用secureCRT工具连接linux主机(配置非常方便,方便粘贴) 2.上传安装包到linux上(用filezilla) 3. ...

  3. Hadoop集群高可用及zookeeper+kafka组件搭建

    目录 一.Hadoop集群高可用 1.Zookeeper概述 1)Zookeeper基本概述 3)Zab协议 3)observer 4)zookeeper集群图例 2.zookeeper集群搭建 3. ...

  4. Hadoop部署方式-高可用集群部署(High Availability)

    Hadoop部署方式-高可用集群部署(High Availability) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参 ...

  5. Hadoop之HA高可用

    Hadoop之HA高可用 1.集群规划 2.前提 3.免密配置 4.修改hadoop配置文件 4.1.hdfs高可用 1.修改core-site.xml 添加如下配置文件 2.修改hdfs-site. ...

  6. mysql+keepalived搭建高可用环境

    假设已经搭建好了mysql并且存在正常状态的主主复制 1.安装keepalived并且根据业务的vip及主机网卡,ip配置好/etc/keepalived/keepalived.conf,具体操作已在 ...

  7. 构建Oracle高可用环境HA rac:企业级高可用数据库架构、实战与经验总结

    1.1  理解Oracle数据库 1.2  Oracle高可用特性(High Availability) 1.3  搭建高可用的周边辅助环境 1.4  高可用应用设计 1.5  高可用数据库设计 1. ...

  8. 【陈吉平】《构建oracle高可用环境》前言

    这里,首先要感谢广大读者的支持与认可,该书第一次印刷到现在,2个多月的时间,就要准备第二次印刷了.在此期间,我也看到了很多读者反馈(包括读者书评与读者来信),他们对本书的肯定,让我深表感动.本书在写作 ...

  9. MHA+keepalive高可用环境搭建

    MHA+keepalive高可用环境搭建 2017年02月17日 14:05:57 阅读数:2582 MHA(Master HighAvailability)目前在MySQL高可用方面是一个相对成熟的 ...

最新文章

  1. c语言联合体作用,C语言 联合体(Unions)
  2. android 骨架屏刷新动画,ios - 原生骨架屏,网络加载过渡动画的封装
  3. CLR Via CSharp读书笔记(14):字符、字符串和文本处理
  4. 巧用linux服务器下的/dev/shm/,避开磁盘IO不给力!
  5. 豪气十足!联想Z6 Pro法拉利定制版本首现
  6. python零基础自学教材-python萌新:从零基础入门到放弃
  7. SQL:Mongoose在node中的应用
  8. networkComms 通信框架之 消息处理器
  9. Linux - 搭建LDAP统一认证服务
  10. 成功实施的APS项目故事分享---如何管理与激励APS项目团队
  11. 【优秀论文解读】UV-SLAM: Unconstrained Line-based SLAM Using Vanishing Points for Structural Mapping
  12. 短视频的素材在哪里找呢?推荐给你一个好办法
  13. 怎么解决服务器延迟问题
  14. unicloud操作数据库(一)——clientDb
  15. 神州租车,致力于提供更加便利的出行方式
  16. 彻底卸载2345王牌输入法的方法
  17. 错误码429是什么错误?
  18. Nginx优化上传文件大小的限制client_max_body_size 8m;
  19. 2022 年度盘点 | 更成熟的 AI,更破圈的技术狂欢
  20. 读Muduo源码笔记---8(定时器)

热门文章

  1. Linux系统编程28:进程间通信之共享内存和相关通信接口(ftok,shmget,shmctl,shmat,shmdt)
  2. Java 网络实例二(查看主机指定文件的最后修改时间、Socket实现多线程服务器程序、Socket连接到指定主机、网页抓取)
  3. Windows端口占用情况?
  4. python 标准库之 glob 介绍(获取文件夹下所有同类文件)
  5. C++面试题-青蛙跳台阶的2种解法
  6. webServlet(/) 和 webServlet(/*) 的区别
  7. Git 几个重要操作指令对比
  8. 【Lintcode】029.Interleaving String
  9. 移动端微信公众号开发中问题记录及解决方案
  10. word20161206