注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

Hadoop-0.20.0源代码中关键的类  

2011-04-07 23:39:09|  分类: Hadoop |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    Hadoop相信大家应该有所了解,这里向大家介绍一下Hadoop-0.20.0源代码方面的内容,希望通过本文的介绍大家对Hadoop-0.20.0源代码有一定的认识,欢迎大家一起来学习。

    本节和大家一起学习一下有关Hadoop-0.20.0源代码方面的内容,主要介绍几个Hadoop中常用的类,相信通过本节的学习大家对Hadoop-0.20.0源代码有一定的了解,让我们一起来学习吧。

    Hadoop-0.20.0源代码分析

    Hadoop框架是两个模型实现的有机整合,亦即Hadoop分布式文件系统(HDFS)与MapReduce并行编程模型,也就是说,Hadoop框架要能够提供的基本功能就是,在存储系统HDFS上进行MapReduce并行计算,所以,如果想要了解Hadoop框架的工作原理和运行机制,主要从这两个方面着手。
    其实,Hadoop中MapReduce并行计算应该是在HDFS实现的,因此了解计算所基于HDFS应该是入口点,当对HDFS有了一定的了解,就能够知道这样一个并行计算平台能够提供哪些进行计算的基础要素。
    当然,在了解HDFS之前,应该先熟悉一下Hadoop对文件系统FS是如何实现的,都提供了哪些操作。在org.apache.hadoop.fs包中,提供了文件系统的高层抽象(FileSystem类),基于该抽象的文件系统,可以来实现满足实际需要的文件系统实现类,例如用来在本地存储原生文件的文件系统(RawLocalFileSystem),例如一个文件系统之上可以存在其它一些类型的文件系统(基于校验和的文件系统ChecksumFileSystem类就是这样的,ChecksumFileSystemextendsFilterFileSystem,FilterFileSystem是一个最基本的文件系统实现)。

    我在阅读源代码的过程中,首先从与org.apache.hadoop.fs包中文件系统相关的其它包org.apache.hadoop.security开始。
    org.apache.hadoop.security包中的一些类涉及到文件系统中用户的信息,例如用户权限等等。所以,为了能够深入了解文件系统和方便阅读源代码,就应该了解与文件系统相关的安全支持,实际上也就是位于Hadoop源代码中org.apache.hadoop.security包中实现。
    下面分别对其中关键类的源代码进行阅读分析:

    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-0.20.0源代码中UserGroupInformation抽象类Hadoop框架中,分布式文件系统框架HDFS具有一个用来存储用户和组信息的实现,它是通过一个位于org.apache.hadoop.security包中的UserGroupInformation抽象类来抽象这些信息的,如果对于特定的基于用户和组的操作系统,都可以继承自该抽象类,用来实现表示用户与组的一些信息的实体,及其一些简单的操作。

    UserGroupInformation类实现了org.apache.hadoop.io.Writable接口,该接口是Hadoop框架基于DataInput和DataOutput定义的一个序列化协议,实现该接口的类支持序列化操作。
    总结一下,UserGroupInformation抽象类主要定义的操作如下:

    1、获取当前用户线程的用和组信息(UGI),通过getCurrentUGI()方法实现的;

    2、获取用户名和组名,分别通过抽象方法getUserName()和getGroupNames()方法实现的;

    3、根据Hadoop的配置类Configuration实例,登录系统后返回一个UserGroupInformation类的实例,通过方法login(Configurationconf)实现的;

    4、读取Hadoop的配置类Configuration实例,返回一个UserGroupInformation类的实例,通过方法readFrom(Configurationconf)实现的。本节关于Hadoop-0.20.0源代码方面的知识介绍到这里。

  评论这张
 
阅读(840)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016