文档章节

hadoop2.x HA下DFSClient初始化流程

_hadooper
 _hadooper
发布于 2014/11/21 16:26
字数 383
阅读 924
收藏 0
Hadoop2.X NameNode加入了autofiledover机制,对于采用了HA的namenode,在HDFS Client访问的时候,是如何自动识别active的NN,又是在active NN 宕机的时候,自动切换到新的NN呢。
本文将从源码角度分析以下两个问题:
1.DFSClient的初始化过程。
2.在Active NN宕机的时候,如何做到自动切换。



1.DFSClient的初始化:


主要涉及的类有以下几个:NameNodeProxies、RetryProxy、RetryInvocationHandler、ConfiguredFailoverProxyProvider。

NameNodeProxies
与NN通讯的对象的创建提供类
RetryProxy
RetryProxy的工厂方法
RetryInvocationHandler
连接异常代理的方法实现
ConfiguredFailoverProxyProvider
获取可用NN的类
具体代码实现相对比较简单,只是逻辑稍微复杂。可自己看源码,有问题可以讨论。

2.在Active NN宕机的时候,如何做到自动切换。
可以看到对于连接异常的处理实现代码:

   
if (action.action == RetryAction.RetryDecision.FAILOVER_AND_RETRY) {//继续选择可用的NN节点
            // Make sure that concurrent failed method invocations only cause a
            // single actual fail over.
            synchronized (proxyProvider) {
              if (invocationAttemptFailoverCount == proxyProviderFailoverCount) {
                proxyProvider.performFailover(currentProxy.proxy); //该方法会重新获取下一个可用的NN
                proxyProviderFailoverCount++;
              } else {
                LOG.warn("A failover has occurred since the start of this method"
                    + " invocation attempt.");
              }
              currentProxy = proxyProvider.getProxy(); //返回当前可用的NN
            }
            invocationFailoverCount++;
          }





performFailover的实现:

@Override
  public synchronized void performFailover(T currentProxy) {
    currentProxyIndex = (currentProxyIndex + 1) % proxies.size();
  }





其实对于获取可用的NN,就是将所有的NN节点方法到List中,然后从下标0开始获取NN,如果有异常Index++,继续获取,直到可用。

© 著作权归作者所有

共有 人打赏支持
_hadooper
粉丝 10
博文 14
码字总数 10349
作品 0
南京
技术主管
Hadoop1.x和2.X的HDFS fsimage和edits文件运行机制对比

一、概述 之前写过一篇非常详细的,利用QJM在HDFS2.0部署HA策略的文章,主要说了利用QJM进行HA部署以及其原理(http://zengzhaozheng.blog.51cto.com/8219051/1441170 )。但是,其中没有详细...

zengzhaozheng
07/02
0
0
大数据Hadoop需要了解哪些内容?

一、Hadoop环境搭建 1. Hadoop生态环境介绍 2. Hadoop云计算中的位置和关系 3. 国内外Hadoop应用案例介绍 4. Hadoop概念、版本、历史 5. Hadoop核心组成介绍及hdfs、mapreduce体系结构 6. H...

mo默瑶
05/05
0
0
hadoop2.x的配置二

三、yarn-site.xml 1.ResourceManager的配置,参考:Hadoop YARN配置参数剖析(1)—RM与NM相关参数 !yarn.resourcemanager.ha.enabled=false。 非YARN HA使用默认配置 YARN HA使用如下配置 ...

cjun1990
2015/08/24
817
0
视频jourk--hadoop2.2.0(第一个2.x的正式版本)框架介绍:笔记

hadoop2.x包括4个模块: common: hadoop的公共模块,以前叫core。包括通信模块等等。。。 HDFS: 分布式文件系统。 YARN: 任务调度和集群管理框架;是一个云操作系统/平台/框架(上面可以放很...

一枚Sir
2014/08/08
0
0
Hadoop 生态圈介绍

简介 Hadoop 是一个能够处理海量数据的分布式系统基础软件框架,理论上能够通过增加计算节点以处理无限增长的数据,由java写成。其作者是 Doug Cutting,得益于谷歌的Map/Reduce计算模型和G...

bochs
2016/11/17
15
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周日乱弹 —— 种族不同,禁止交往

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《苏菲小姐》- 鱼果 《苏菲小姐》- 鱼果 手机党少年们想听歌,请使劲儿戳(这里) @貓夏:下大雨 正是睡觉的好时候 临睡前...

小小编辑
今天
199
6
Python 搭建简单服务器

Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下: 1.等待客户端的链接,服务器会收到一个http协议的请求数据报 2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文...

代码打碟手
今天
1
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
今天
0
0
qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部