HDFS源码分析之NameNode(1)————启动过程
源码: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)————启动过程的更多相关文章
- SpringBoot源码分析之SpringBoot的启动过程
SpringBoot源码分析之SpringBoot的启动过程 发表于 2017-04-30 | 分类于 springboot | 0 Comments | 阅读次数 SpringB ...
- Envoy 源码分析--程序启动过程
目录 Envoy 源码分析--程序启动过程 初始化 main 入口 MainCommon 初始化 服务 InstanceImpl 初始化 启动 main 启动入口 服务启动流程 LDS 服务启动流程 ...
- Spring源码分析专题 —— IOC容器启动过程(上篇)
声明 1.建议先阅读<Spring源码分析专题 -- 阅读指引> 2.强烈建议阅读过程中要参照调用过程图,每篇都有其对应的调用过程图 3.写文不易,转载请标明出处 前言 关于 IOC 容器 ...
- HDFS源码分析之NameNode(2)————Format
在Hadoop的HDFS部署好了之后并不能马上使用,而是先要对配置的文件系统进行格式化.在这里要注意两个概念,一个是文件系统,此时的文件系统在物理上还不存在,或许是网络磁盘来描述会更加合适:二就是格式 ...
- Netty源码分析之服务端启动过程
一.首先来看一段服务端的示例代码: public class NettyTestServer { public void bind(int port) throws Exception{ EventL ...
- zookeeper源码分析之一服务端启动过程
zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...
- HDFS源码分析:NameNode相关的数据结构
本文主要基于Hadoop1.1.2分析HDFS中的关键数据结构. 1 NameNode 首先从NameNode开始.NameNode的主要数据结构如下: NameNode管理着两张很重要的表: 1) ...
- HDFS源码分析之NameNode(3)————RpcServer
NameNodeRpcServer implements NamenodeProtocols NameNode支持核心即NameNodeRpcServer 实现ClientProtocol 支持客户 ...
- HDFS源码分析二-NameNode实现
2. NameNode 实现( 未完待续 )
随机推荐
- mysql简单主从复制(一)
MYSQL简单主从复制 master:172.25.44.1 slave:172.25.44.2 mysql5.7安装 master和slave均操作 准备rpm包:mysql-5.7.17-1.el ...
- 如何使用 Weave 网络?- 每天5分钟玩转 Docker 容器技术(63)
weave 是 Weaveworks 开发的容器网络解决方案.weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来.对容器来说,weave 就像一个巨大的以太网交换机,所有容器都被接入这个交 ...
- js(javascript) 继承的5种实现方式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt240 js继承有5种实现方式:1.继承第一种方式:对象冒充 functio ...
- Java double和 float丢失精度问题
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt357 由于对float或double 的使用不当,可能会出现精度丢失的问题. ...
- JQuery实用技巧--学会你也是大神(1)——插件的制作技巧
前 言 JRedu 学习之前,首先我们需要知道什么是JQuery? JQuery是一个优秀的javascript框架. JQuery是继Prototype之后又一个优秀的Javascript框架 ...
- oop作业二—circle
oop作业-circle 题目描述 编写一个程序,要求根据给定的圆的半径求圆的面积,并将求得的结果打印出来. 要求: 输入输出采用cin和cout. 建立一个工程,将程序写成两个.cpp和一个.h的形 ...
- Java单元测试之覆盖率统计eclemma
安装 有两种安装方法 下载安装(推荐) 地址: http://sourceforge.net/projects/eclemma/ 将解压后的features和plugins目录下的文件分别拷贝到Ecl ...
- 1001.A+B Format (20)的解题
关于A+B的正确打开方式! 解题思路 gitub 也是研究了很久才学会了本地上传,中间还遇到一些问题,多亏学长的教程跟搜索引擎的帮忙解决啦! 我想还是了解题目的意思是解题的最关键,通过了查词软件跟自身 ...
- 201521123077 《Java程序设计》第3周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 201521123098 JAVA课程设计
1.团队课程设计博客链接 http://www.cnblogs.com/agts/p/7067948.html 2.个人负责模块或任务说明 个人任务:实现初始界面中的登录.注册模块,以及数据库的连接和 ...