源码:2.8.0

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

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

  1. 服务
  2. server ipc.RPC.Server server.namenode.NameNodeRpcServer
  3. serviceRpcServer ipc.RPC.Server
  4. HttpServer http.HttpServer
  5. Trash Emptier fs.Trash.Trash.Emptier
  6. hbthread hdfs.server.namenode.FSNamesystem.HeartbeatMonitor
  7. lmthread hdfs.server.namenode.LeaseManager.Monitor
  8. replthread hdfs.server.namenode.FSNamesystem.ReplicationMonitor
  9. dnthread hdfs.server.namenode.DecommissionManager.Monitor

  

初始化步骤如下:

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

  1. // Parse the rest, NN specific args.
  2. StartupOption startOpt = parseArguments(argv);
  3. if (startOpt == null) {
  4. printUsage(System.err);
  5. return null;
  6. }
  7. setStartupOption(conf, startOpt);

准备工作:

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

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

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

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

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

最后调用接口进行认证

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

  

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

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

  

3.创建RPCServer

  1. rpcServer = createRpcServer(conf);

创建过程如下:

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

NameNodeRpcServer实现NamenodeProtocols  支持以下Rpc调用

  1. public interface NamenodeProtocols
  2. extends ClientProtocol,
  3. DatanodeProtocol,
  4. DatanodeLifelineProtocol,
  5. NamenodeProtocol,
  6. RefreshAuthorizationPolicyProtocol,
  7. RefreshUserMappingsProtocol,
  8. RefreshCallQueueProtocol,
  9. GenericRefreshProtocol,
  10. GetUserMappingsProtocol,
  11. HAServiceProtocol,
  12. TraceAdminProtocol {
  13. }

NameNodeRpcServer

  1. /** The RPC server that listens to requests from DataNodes
        ##Address配置:dfs.namenode.servicerpc-address 默认8022
        ##dfs.namenode.service.handler.count 处理线程数
  1. */
  2. private final RPC.Server serviceRpcServer;
  3. private final InetSocketAddress serviceRPCAddress;
  4.  
  5. /** The RPC server that listens to lifeline requests
       #dfs.namenode.lifeline.rpc-address 默认50070*/
  1. private final RPC.Server lifelineRpcServer;
  2. private final InetSocketAddress lifelineRPCAddress;
  3.  
  4. /** The RPC server that listens to requests from clients
        dfs.namenode.rpc-bind-host 默认8020*/
  1. 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. JavaScript即时判断输入密码的强度

    源码示例: 1.javascript代码 <script type="text/javascript"> //CharMode函数 //测试某个字符是属于哪一类. fu ...

  2. String 操作

    String nbbms ="col_1_1_1_1,col_2_2_2_@,"; @ 实现将最后一个逗号去掉:从第一个字符串到最后一个逗号之前的字符串截取[java] Strin ...

  3. URI和URL的区别 一起学习呗

    一直存在很多技术上的争论,其中最为妙的恐怕就是web地址应该叫什么的问题.通常情况就是这样:有人把地址栏的内容叫"URL",这时候有些人就来劲了:"不!其实那就是URI. ...

  4. js 对于回车时间的监听,提交表单

    // ------ 监听回车事件 -----------------// document.onkeydown=keyDownSearch; function keyDownSearch(e) { / ...

  5. java对象 深度克隆(不实现Cloneable接口)和浅度克隆

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt128 为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象 ...

  6. Project 3:N级魔方阵

    魔方阵:由n*n个数字所组成的n阶方阵,具有各对角线,各横列与纵行的数字和都相等的性质,称为魔方阵.而这个相等的和称为魔术数字.若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵. 目标:输入一 ...

  7. svn to git

    SVN to git 配置用户: #git config --global user.name "root"#git config --global user.email &quo ...

  8. 测试与发布(Alpha版本)

    [Alpha阶段]测试报告 1.测试找出的BUG (1).这种情况刷新就好 (2).文件必须10个才行,多余10个的部分不会进入查重的部分,少于会出错: (3).文件保存在d:\files,由于有些原 ...

  9. 201521123015 《Java程序设计》第七周学习总结

    1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码如下: public boolean contains(Object ...

  10. 201521123070 《JAVA程序设计》第4周学习总结

    1. 本章学习总结 1.1 尝试使用思维导图总结有关继承的知识点. http://naotu.baidu.com/file/4de6f42e4f4f6cce0531dd9997b04e60?token ...