文档章节

一个MapReuce作业的从开始到结束--第3章 NameNode节点启动分析

brian_2017
 brian_2017
发布于 2017/01/17 09:22
字数 1027
阅读 3
收藏 0

    从bin/hadoop中可知,NameNode节点对应的类NameNode类,它的源代码文件是hdfs/org/apache/hadoop/hdfs/server/namenode/NameNode.java

NameNode启动执行函数的次序:

[1]. 执行main函数。

[2].main函数中执行createNameNode函数,得到NameNode的实例namenode

[3].createNameNode中,获取配置confHadoopConfiguration类管理配置。

1.Configuration

根据HadoopAPI可以,Hadoop的配置由Configuration类进行管理。配置由资源指定。资源由形如xml格式的名/值对设置和保存的。名又分两种,一种是字符串,另一种是Path类型的对象。Hadoop默认有两个资源,即字符串”core-default.xml”和”core-site.xml”

通常来说,字符串资源就是文件名,Configuration类得到字符串资源后,会在JavaClassPath中寻找字符串对应的文件,然后从文件里读取配置。如果资源是Path类型的对象,就直接从对象中读取配置,不需要检测ClassPath了。

Configuration类在实例化的时候,这一段代码先执行:

static{

ClassLoader cL =Thread.currentThread().getContextClassLoader();

if (cL == null) {

cL =Configuration.class.getClassLoader();

}

...

addDefaultResource("core-default.xml");

addDefaultResource("core-site.xml");

}



这一段代码载入两个默认资源。

然后再执行下面这段代码,获取classLoader

{

classLoader =Thread.currentThread().getContextClassLoader();

if (classLoader == null){

classLoader =Configuration.class.getClassLoader();

}

}



然后执行构造函数Configuration()

然后执行构造函数Configuration(true)

至此,Configuration类实例化完成。

Configuration管理配置是一种“懒加载”的方式,添加资源之后,并不立即更新所有配置,而是做一个标记,其他函数读取配置的时候,先检查这个标记,如果标记指明需要更新配置,再从配置文件中更新全部配置,然后再读取所需要的值。

Configuration类负责读取配置的函数是loadResource函数,函数原型如下:

private voidloadResource(Properties properties, Object name, boolean quiet)

它的形参name可以是URL,可以是字符串,可以是Path等等诸多类型。比如说,如果name是字符串类型,也就是文件名,那么就由classLoaderClassPath中找到这个文件,返回URL的绝对路径文件名,然后再从文件读取配置。



[4].createNameNode函数中,调用parseArguments函数处理输出参数argv。在默认情况下,argv是空的,parseArguments函数的返回值是StartupOptionstartOpt枚举类型变量REGULARREGULAR的值是字符串”-regular”

[5]. createNameNode函数中,调用setStartupOption函数设置配置参数,也就是将dfs.namenode.startup设置成字符串”-regular”

[6].createNameNode函数中,调用DefaultMetricsSystem.initialize函数初始化NameNode,语句如下:

DefaultMetricsSystem.initialize("NameNode");

2.DefaultMetricsSystem

DefaultMetricSystem,默认度量系统,主要是为监控Hadoop集群提供接口。DefaultMericsSystem类实现了MetricsSystem接口。MetricsSystem接口继承MetricsSystemMXBean接口。

DefualtMetricsSystem以枚举类型实现了Singleton模式,确保只有一个NameNode的度量系统。

DefaultMericsSystem调用initialize函数初始化,最终是调用MetricsSystemImpl类的init函数进行初始化。

MetricsSystemImpl类的init函数执行两个函数,start函数和initSystemMBean函数。 在start函数,主要执行两个函数:configure函数和startTimer函数。configure函数为NameNode创建MetricConfig对象,然后初始化配置槽,资源,和系统。startTimer函数,启动一个Timer计时。



[7].createNameNode函数中,创建一个NameNode类的namenode对象,然后返回。在NameNode类的构造函数,NameNode的构造函数主要执行initialize函数,initialize函数的主要任务是,进行安全认证,然后启动RPCServer,再启动HttpServer

[8].main函数中,namenode执行join函数。这个join函数,也就是执行RPCServerjoin函数,执行wait函数,等待被结束。

[9].RPCServer类里,有一个线程类Listener对象,一个线程类Responser对象,一个线程对象Handler数组,它们在NameNode的生命周期内始终运行。Listener对象监听Socket端口,把接收到的RPC命令记录到callQueue。线程对象Handler数组从callQueue取出RPC命令,执行RPC命令,然后把结果传给Responder对象。Responder对象把RPC结果返回给调用方。

© 著作权归作者所有

brian_2017
粉丝 3
博文 61
码字总数 145216
作品 0
私信 提问
Hadoop各模块的具体分析

Hadoop集群架构 Hadoop集群由一个Master主节点和若干个Slave节点组成。其中,Master节点上运行NameNode和JobTracker守护进程;Slave节点上运行DataNode和TaskTracker守护进程。 Hadoop分别从...

牧师-Panda
2016/11/06
1K
0
第9章-构建Hadoop集群-笔记

控制脚本 Hadoop内置一些脚本来运行指令,在集群内启动和终止守护进程。 这些脚本存放在bin目录中,通过masters和slaves文件指定集群内的所有机器。 1、masters文件,主要记录运行辅助namen...

hiqj
2014/09/15
224
0
Hadoop中HDFS和MapReduce节点基本简介

Hadoop提供存储文件和分析文件的机制。 HDFS负责文件的存储,MapReduce负责文件的分析过程。 HDFS主要组件由NameNode和DataNode组成 HDFS文件切分成块(默认大小64M),以块为单位,每个块有...

zhao_xiao_long
2013/07/27
0
0
Hadoop集群安装部署详解

本文主要介绍Hadoop的一些基本信息及完全分布式安装,每一步都是笔者亲自操作所记录下来的,现分享出来希望能帮助到正准备研究Hadoop的朋友 Hadoop介绍 Hadoop由HDFS、MapReduce、Hbase、Hiv...

阿郎_
2017/04/04
0
0
阿里云 E-MapReduce产品优势及使用场景

E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 产品优势: 与自建集...

凹凹凸曼
2018/09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 ——不知道假装开心,装的像么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :天黑了 你很忧愁, 你说世界上, 找不到四块五的妞, 行走在凌晨两点的马路上, 你疲倦地拿着半盒黄鹤楼。#今日歌曲推荐# 《四块...

小小编辑
今天
2.1K
16
64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
68
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
32
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
116
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部