HDFS源码剖析第一篇:Hadoop Configuraion

Hadoop的源码实在庞大, 第一部分先分析Configuration。

Hadoop系统中的一个configuration,可以看做是一堆key-value对,保存在Configuration的properties属性中,而这些properties来源于 Resources,一个Resource可以是一个xml文件,可以是另一个Configuration,等等。Configuration会默认加载 core-default.xml和core-site.xml两个Resource。Configuration可以调用AddResource方法动 态加载Resource,加载后,会触发Hadoop系统中所有configuration的property重构。

为了知道Hadoop系统中有哪些Configuration, Configuration类中就由一个static 的 REGISTRY, 是一个WeakHashMap,但Value没有用到,保存了所有存在的Configuration。

WeakHashMap是一个比较有趣的东西。

HashMap当put(key,value)时,会给key加一个reference,当这个key在其他地方都被删除了,如果HashMap没有删除这个key, gc时是不会回收这个key的。

但WeakHashMap put (key, value)时,不会给key加一个reference, 当这个key在其他地方被删除后,gc之后,WeakHashMap会自动删除这个key, 所以,WeakHashMap非常适合管理资源,当资源被删除后,WeakHashMap也会自动删除这个key:

1.    新建WeakHashMap,将“键值对”添加到WeakHashMap中。实际上,WeakHashMap是通过数组table保存Entry(键值对);每一个Entry实际上是一个单向链表,即Entry是键值对链表。

2.    当某“弱键”不再被其它对象引用,并被GC回收时。在GC回收该“弱键”时,这个“弱键”也同时会被添加到ReferenceQueue(queue)队列中。

3.    当下一次我们需要操作WeakHashMap时,会先同步table和queue。table中保存了全部的键值对,而queue中保存被GC回收的键值对;同步它们,就是删除table中被GC回收的键值对。

这就是“弱键”如何被自动从WeakHashMap中删除的步骤了

property被触发重构后,所以当外部调用Configuration的get方法想得到某个property值时,会重新从各种Resource加载key-value对到properties里。

除 了AddResource,还有AddDefaultResource方法,一般是在Configuration初始化时使用,例如 Configuration会加载core-default.xml和core-site.xml两个Resource作为defaultResource,而其子类HdfsConfiguration会加载hdfs-default.xml和hdfs-site.xml作为defaultResource

defaultResource是static类型,也就是Hadoop系统里所有的Configuration都会共享defaultResource,所以要考虑线程安全问题,defaultResource是CopyOnWriteArrayList类型

CopyOnWriteArrayList是一个线程安全的ArrayList类型,会使用copy onwrite的方式,一般适合读多写少的情景,如果写多,copy on write就会copy太多次,影响性能

除了AddResource这回事,还可以使用Configuration的set方法修改properties,为了保留这些修改,Configuration里有overlay这个属性

总的来说Hadoop的Configuration并不复杂,主要维护一些properties供Hadoop计算时使用。

时间: 2024-10-10 14:47:21

HDFS源码剖析第一篇:Hadoop Configuraion的相关文章

菜鸟nginx源码剖析 框架篇(一) 从main函数看nginx启动流程(转)

俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔.对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中的奥秘,下面我们就一起来研究一下nginx的main函数. 1.nginx的main函数解读 nginx启动显然是由main函数驱动的,main函数在在core/nginx.c文件中,其源代码解析如下,涉及到的数据结构在本节仅指出其作用,将在第二节中详细解释. nginx main函数的流程图如下:

Apache Flink fault tolerance源码剖析完结篇

这篇文章是对Flinkfault tolerance的一个总结.虽然还有些细节没有涉及到,但是基本的实现要点在这个系列中都已提及. 回顾这个系列,每篇文章都至少涉及一个知识点.我们来挨个总结一下. 恢复机制实现 Flink中通常需要进行状态恢复的对象是operator以及function.它们通过不同的方式来达到状态快照以及状态恢复的能力.其中function通过实现Checkpointed的接口,而operator通过实现StreamOpeator接口.这两个接口的行为是类似的. 当然对于数据

hdfs源码分析第一弹

1. hdfs定义 HDFS is the primary distributed storage used by Hadoop applications. A HDFS cluster primarily consists of a NameNode that manages the file system metadata and DataNodes that store the actual data. 2. hdfs架构 3. hdfs实例 作为文件系统,文件的读写才是核心: /** *

Apktool源码解析——第一篇

著名的apktool是android逆向界用的最普遍的一个工具,这个项目的原始地址在这里http://code.google.com/p/android-apktool/,但是你们都懂的在天朝谷歌是无法访问的,所以直接上github的 https://github.com/brutall/brut.apktool. 在brut.apktool路径是主要代码所在,当然还有brut.apktool.smali是反编译smali的目录,目测还有brut.j.common,brut.j.dir,brut

菜鸟nginx源码剖析架构篇(二) nginx进程模型

Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:Nov 17th, 2014 1.nginx进程模型 nginx采用的是多进程模型,典型的master-worker方式,采用一个master process(监控进程,也叫做主进程)和多个woker process(工作进程)的设计方式,此外,还有1个可选的chache manager和 1 个可选的cache loader进程.

Pytorch1.3源码解析-第一篇

pytorch$ tree -L 1 . ├── android ├── aten ├── benchmarks ├── binaries ├── c10 ├── caffe2 ├── CITATION ├── cmake ├── CMakeLists.txt ├── CODEOWNERS ├── CONTRIBUTING.md ├── docker ├── docs ├── ios ├── LICENSE ├── Makefile ├── modules ├── mypy-files.txt

(升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课程会涵盖Scala编程详解.Spark核心编程.Spark SQL和Spark Streaming.Spark内核以及源码剖析.性能调优.企业级案例实战等部分.完全从零起步,让学员可以一站式精通Spark企业级大数据开发,提升自己的职场竞争力,实现更好的升职或者跳槽,或者从j2ee等传统软件开发工程

菜鸟nginx源码剖析 配置与部署篇(一) 手把手实现nginx "I love you"

菜鸟nginx源码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:Nov 7th, 2014 还记得在前几年的CSDN泄漏账号事件中,统计发现程序员的账号中含有love的最多,这里我也俗套下,在这篇文章中将讲解如何 一步一步实用Nginx在一台机器上搭建一个最简单的显示"I love yo

Mongoose源码剖析:外篇之web服务器

转 http://www.cnblogs.com/skynet/archive/2010/07/24/1784110.html 这个博主里面很多关于mongoose的剖析 引言 在深入Mongoose源码剖析之前,我们应该清楚web服务器是什么?它提供什么服务?怎样提供服务?使用什么协议?客户端如何唯一标识web服务器的资源?下面我们抛开Mongoose,来介绍一个web服务的这些通性. web服务器:通常是指一个计算机程序(web服务器是什么?),在World Wide Web上提供诸如web