Hadoop框架:HDFS高可用环境配置

Hadoop框架:HDFS高可用环境配置

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

一、HDFS高可用

1、基础描述

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

2、机制详解

<span>Hadoop框架:HDFS高可用环境配置</span>

  • 基于两个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

查看当前状态

<span>Hadoop框架:HDFS高可用环境配置</span>

在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

<span>Hadoop框架:HDFS高可用环境配置</span>

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

<span>Hadoop框架:HDFS高可用环境配置</span>

结束hop02的NameNode进程

kill -9 14422

等待一下查看hop01状态

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

三、YARN高可用

1、基础描述

<span>Hadoop框架:HDFS高可用环境配置</span>

基本流程和思路与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

<span>Hadoop框架:HDFS高可用环境配置</span>

四、源代码地址

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·点这里 ☆☆☆☆☆
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2701.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • layui 如何去dom_layui 弹出层

    layui 如何去dom_layui 弹出层这是一个可以重要也可以不重要的方法,重要的是,它的权利真的很大,尤其是在模块化加载layer时,你会发现你必须要用到它。它不仅可以配置一些诸如路径、加载的模块,甚至还可以决定整个弹层的默认参数。而说它不重要,是因为多数情况下,你会发现,你似乎不是那么十分需要它。但你真的需要认识一下这位伙计。如果您是采用seajs或者requirejs加载layer,你需要执行该方法来完成初始化的配置。比如:lay…

  • 使用pscp命令在Windows与linux之间拷贝文件

    使用pscp命令在Windows与linux之间拷贝文件

  • c语言获得当前时间_c语言怎么表示时间

    c语言获得当前时间_c语言怎么表示时间函数名:time()头文件:time.h函数原型:time_ttime(time_t*timer)功能:获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从UTC(CoordinatedUniversalTime)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后可以调用localtime将time_t…

    2022年10月10日
  • 个人网站开发流程(网站开发的工作流程图)

    1.确定主题选择主题应该是小而精,目标定位要小,内容要精。不要去试图制作一个包罗万象的站点,这往往会失去网站的特色,也会带来高强度的劳动,给网站的及时更新带来困难。一定记住,在互联网只有第一,没有第二。2.选择域名在互联网世界中,域名就是网站的名字。一个好记,易记得域名会给个人网站加分,当积累了一定的用户的人气的个人网站,域名的价值就会体现出来。3.学习网页设计和开发技术对于常…

  • pycharm中如何取消多行注释_pycharm怎么注释代码

    pycharm中如何取消多行注释_pycharm怎么注释代码pycharm中同时注释(取消注释)多行(单行)代码的快捷键都是Ctrl+/:选中代码,同时按住Ctrl+/(command+/),被选中行被注释;再次按下Ctrl+/(command+/),注释被取消….

  • 括号匹配问题 栈c语言(c语言栈实现括号匹配)

    例如:{}[()]、{[()]}、()[]{}这种大中小括号成对出现(位置不限)则为括号匹配,反之则不匹配,如{()[接下来看一下实现方式栈的定义以及相关操作//栈的定义typedefstruct{ charelem[stack_size]; inttop;}seqStack;//栈的初始化voidinitStack(seqStack*s){ s->top=-…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号