【ACCESS精品源码栏目提醒】:网学会员为广大网友收集整理了,Hadoop源代码分析 - 软件工程,希望对大家有所帮助!
Hadoop-0.20.0 源代码分析注:以下所有内容都是来自:http://blog.csdn.net/shirdrn/article/details/4569702Hadoop 框架是两个模型实现的有机整合,亦即 Hadoop 分布式文件系统(HDFS)与MapReduce 并行编程模型,也就是说,Hadoop 框架要能够提供的基本功能就是,在存储系统 HDFS 上进行 MapReduce 并行计算,所以,如果想要了解 Hadoop 框架的工作原理和运行机制,主要从这两个方面着手。
其实,Hadoop 中 MapReduce 并行计算应该是在 HDFS 实现的,因此了解计算所基于 HDFS应该是入口点,当对 HDFS 有了一定的了解,就能够知道这样一个并行计算平台能够提供哪些进行计算的基础要素。
当然,在了解 HDFS 之前,应该先熟悉一下 Hadoop 对文件系统 FS 是如何实现的,都提供 在了哪些操作。
org.apache.hadoop.fs 包中,提供了文件系统的高层抽象(FileSystem 类),基于该抽象的文件系统,可以来实现满足实际需要的文件系统实现类,例如用来在本地存储原生文件的文件系统(RawLocalFileSystem),例如一个文件系统之上可以存在其它一些类型的文件系统(基于校验和的文件系统 ChecksumFileSystem 类就是这样的,ChecksumFileSystem extends FilterFileSystem,FilterFileSystem 是一个最基本的文件系统实现)。
我在阅读源代码的过程中,首先从与 org.apache.hadoop.fs 包中文件系统相关的其它包org.apache.hadoop.security 开始。
org.apache.hadoop.security 包中的一些类涉及到文件系统中用户的信息,例如用户权限等等。
所以,为了能够深入了解文件系统和方便阅读源代码,就应该了解与文件系统相关的安全支持,实际上也就是位于 Hadoop 源代码中 org.apache.hadoop.security 包中实现。
下面 org.apache.hadoop.security 包中类的继承关系:view plain 1. java.lang.Object 2. implements org.apache.hadoop.security.Group implements java.security.Principal 3. org.apache.hadoop.security.SecurityUtil 4. org.apache.hadoop.security.SecurityUtil.AccessControlList implements 5. java.lang.Throwable implements java.io.Serializable 6. java.lang.Exception 7. java.io.IOException 8. org.apache.hadoop.fs.permission.AccessControlException 9. org.apache.hadoop.security.AccessControlException implements 10. org.apache.hadoop.security.User implements java.security.Principal implements 11. org.apache.hadoop.security.UserGroupInformation implements java.security.P rincipal org.apache.hadoop.io.Writable 12. org.apache.hadoop.security.UnixUserGroupInformation下面分别对其中关键类的源代码进行阅读分析:Group 类与 User 类首先,org.apache.hadoop.security.Group 类与 org.apache.hadoop.security.User 类都是一个实体类,表征一个属于 HDFS 文件系统中存在的一类实体,它们的定义非常相似,下面只拿出 Group 类来说明。
Group 类表示一个组的概念实现,它实现了 java.security.Principal 接口,也就是说 Group类表示一个用来容纳一些对象的实体,比如一个组中可以包含多个不同的用户,一个组中可以包含多种不同的权限,一个组中还可以包含多种授权的证书,等等。
这个类比较容易,包含一个 final 修饰的组名称的字段,也就是说一个组一旦创建就不能修改组名称,Group 类没有提供修改组名称的方法。
新创建一个组的时候,需要指定组名称。
该类中比较重要的是equals 方法,用来比较某个 Object 对象(组对象)是够与该组(this)相互匹配。
UserGroupInformation 抽象类在 Hadoop 框架中,分布式文件系统框架 HDFS 具有一个用来存储用户和组信息的实现,它是通过一个位于 org.apache.hadoop.security 包中的 UserGroupInformation 抽象类来抽象这些信息的,如果对于特定的基于用户和组的操作系统,都可以继承自该抽象类,用来实现表示用户与组的一些信息的实体,及其一些简单的