源码:2.8.0

入口类:org.apache.hadoop.hdfs.server.namenode.NameNode

main方法会调用createNameNode 创建 NameNode 实例,如果是 FORMAT 戒 FINALIZE,调用对应的方法后退出,如果是其他的参数,将创建NameNode 对象。创建的服务如下:

服务                             类
server ipc.RPC.Server server.namenode.NameNodeRpcServer
serviceRpcServer ipc.RPC.Server
HttpServer http.HttpServer
Trash Emptier fs.Trash.Trash.Emptier
hbthread hdfs.server.namenode.FSNamesystem.HeartbeatMonitor
lmthread hdfs.server.namenode.LeaseManager.Monitor
replthread hdfs.server.namenode.FSNamesystem.ReplicationMonitor
dnthread hdfs.server.namenode.DecommissionManager.Monitor

  

初始化步骤如下:

分析启动模式: Format(格式化NameNode元数据及日志信息)

// Parse the rest, NN specific args.
StartupOption startOpt = parseArguments(argv);
if (startOpt == null) {
printUsage(System.err);
return null;
}
setStartupOption(conf, startOpt);

准备工作:

setClientNamenodeAddress(conf);  //设置clients访问nomenode或nameservice的访问地址  配置项fs.defaultFS  

1.初始化登录认证,如果HADOOP开启了Kerberos认证,则进行认证。

UserGroupInformation.setConfiguration(conf);
loginAsNameNodeUser(conf);

认证的配置信息来自hdfs-site.xml

配置项
Dfs.namenode.keytab.file #keytab文件
Dfs.namenode.kerberos.principal           #kerberos认证个体

最后调用接口进行认证

//UserGroupInformation管理用户登录
UserGroupInformation.loginUserFromKeytab(principalName, keytabFilename);

  

2.如果当前启动的NameNode角色是启用状态,启动HTTPServer服务

    if (NamenodeRole.NAMENODE == role) {
startHttpServer(conf);
}

  

3.创建RPCServer

rpcServer = createRpcServer(conf);

创建过程如下:

#初始化NameNode线程数,dfs.namenode.handler.count 默认10
int handlerCount =
conf.getInt(DFS_NAMENODE_HANDLER_COUNT_KEY,
DFS_NAMENODE_HANDLER_COUNT_DEFAULT); #设置初始化的RPC Engine
RPC.setProtocolEngine(conf, ClientNamenodeProtocolPB.class,
ProtobufRpcEngine.class);

NameNodeRpcServer实现NamenodeProtocols  支持以下Rpc调用

public interface NamenodeProtocols
extends ClientProtocol,
DatanodeProtocol,
DatanodeLifelineProtocol,
NamenodeProtocol,
RefreshAuthorizationPolicyProtocol,
RefreshUserMappingsProtocol,
RefreshCallQueueProtocol,
GenericRefreshProtocol,
GetUserMappingsProtocol,
HAServiceProtocol,
TraceAdminProtocol {
}

NameNodeRpcServer

  /** The RPC server that listens to requests from DataNodes 
    ##Address配置:dfs.namenode.servicerpc-address 默认8022
    ##dfs.namenode.service.handler.count 处理线程数
  */
private final RPC.Server serviceRpcServer;
private final InetSocketAddress serviceRPCAddress; /** The RPC server that listens to lifeline requests
   #dfs.namenode.lifeline.rpc-address 默认50070*/
  private final RPC.Server lifelineRpcServer;
private final InetSocketAddress lifelineRPCAddress; /** The RPC server that listens to requests from clients
    dfs.namenode.rpc-bind-host 默认8020*/
protected final RPC.Server clientRpcServer; 
protected final InetSocketAddress clientRpcAddress;

HDFS源码分析之NameNode(1)————启动过程的更多相关文章

  1. SpringBoot源码分析之SpringBoot的启动过程

    SpringBoot源码分析之SpringBoot的启动过程 发表于 2017-04-30   |   分类于 springboot  |   0 Comments  |   阅读次数 SpringB ...

  2. Envoy 源码分析--程序启动过程

    目录 Envoy 源码分析--程序启动过程 初始化 main 入口 MainCommon 初始化 服务 InstanceImpl 初始化 启动 main 启动入口 服务启动流程 LDS 服务启动流程 ...

  3. Spring源码分析专题 —— IOC容器启动过程(上篇)

    声明 1.建议先阅读<Spring源码分析专题 -- 阅读指引> 2.强烈建议阅读过程中要参照调用过程图,每篇都有其对应的调用过程图 3.写文不易,转载请标明出处 前言 关于 IOC 容器 ...

  4. HDFS源码分析之NameNode(2)————Format

    在Hadoop的HDFS部署好了之后并不能马上使用,而是先要对配置的文件系统进行格式化.在这里要注意两个概念,一个是文件系统,此时的文件系统在物理上还不存在,或许是网络磁盘来描述会更加合适:二就是格式 ...

  5. Netty源码分析之服务端启动过程

    一.首先来看一段服务端的示例代码: public class NettyTestServer { public void bind(int port) throws Exception{ EventL ...

  6. zookeeper源码分析之一服务端启动过程

    zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...

  7. HDFS源码分析:NameNode相关的数据结构

    本文主要基于Hadoop1.1.2分析HDFS中的关键数据结构. 1 NameNode 首先从NameNode开始.NameNode的主要数据结构如下: NameNode管理着两张很重要的表: 1)  ...

  8. HDFS源码分析之NameNode(3)————RpcServer

    NameNodeRpcServer implements NamenodeProtocols NameNode支持核心即NameNodeRpcServer 实现ClientProtocol  支持客户 ...

  9. HDFS源码分析二-NameNode实现

    2. NameNode 实现( 未完待续 )

随机推荐

  1. Django 学习笔记(六)MySQL配置

    环境:Ubuntu16.4 工具:Python3.5 一.安装MySQL数据库 终端命令: sudo apt-get install mysql-server sudo apt-get install ...

  2. 关于模式为singTask的activity的bundle问题

    1.问题描述 今天遇到一个问题,我的一个页面跳模式为singTask的activity时,bundle的值拿不到,我于是找了下,发现基础真的很重要; 2.原因 launchMode为singleTas ...

  3. wcf 上传文件报413,404和发布错误

    上传文件错误: 其实要修改所有的服务,不管是服务端还是客户端,Binding那边增加一个没有设置名字的默认配置就OK了:  <binding   closeTimeout="00:10 ...

  4. python 小技巧 防止SSL报错信息

    代码里面 只需要添加如下2行: import ssl ssl._create_default_https_context = ssl._create_unverified_context

  5. spring整合mybatis错误:class path resource [config/spring/springmvc.xml] cannot be opened because it does not exist

    spring 整合Mybatis 运行环境:jdk1.7.0_17+tomcat 7 + spring:3.2.0 +mybatis:3.2.7+ eclipse 错误:class path reso ...

  6. Http get方式url参数长度以及大小

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp69 众所周知, 传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推 ...

  7. HTML特殊符号、常用字符实体

    HTML特殊符号对照表.常用的字符实体 最常用的字符实体 显示结果 描述 实体名称 实体编号   空格     <</td> 小于号 < < > 大于号 > ...

  8. CCIE-MPLS VPN-实验手册(下卷)

    10:跨域的MPLS VPN (Option A) 10.1 实验拓扑 10.1 实验需求 a.       R1 R2 R3 组成P-NETWORK R1 R2 R3 位于AS 1,底层协议采用EI ...

  9. 201521123082 《Java程序设计》第14周学习总结

    201521123082 <Java程序设计>第14周学习总结 标签(空格分隔):java 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. Answ ...

  10. 团队项目汇总beta

    一.Daily Scrum Meeting[Alpha] 4.23-第一天 4.24-第二天 4.25-第三天 4.26-第四天 4.27-第五天 4.28-第六天 4.29-第七天 二.Daily ...