Hadoop-0.20.0源代码分析(02)

本文详细分析了Hadoop中UnixUserGroupInformation类,它实现了Unix系统用户和组信息的抽象,包括默认值、属性、构造方法、序列化与反序列化,以及如何模拟执行Shell命令获取用户和组信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UserGroupInformation类定义了一个与文件系统相关的用户和组信息抽象的内容,Hadoop框架实现了一个基于Unix系统的用户和组信息的实现类UnixUserGroupInformation,该类继承自UserGroupInformation抽象类。

从UserGroupInformation抽象类与其子类UnixUserGroupInformation的属性字段可以看出,抽象类所定义的功能信息重心在,描述一个登录以后获得的UserGroupInformation实例,而UnixUserGroupInformation类主要是侧重于登录前的信息的处理。首先看一下UnixUserGroupInformation类中定义的属性:

前面两个是默认的Unix用户名DEFAULT_USERNAME和组名DEFAULT_GROUP,另外其中用户名userName和组名groupNames是根据UnixUserGroupInformation类构造方法设置的,这样保证了即使无法得到用户和组的信息,也能够使用默认的值去填充,比较适合用于测试,快速定位到用户名和组名的设置处。

第二个属性user2UGIMap是一个<用户名, 用户和组信息实例>的Map,用来快速获取到用户和组的信息。

最后一个UGI_TECHNOLOGY定义读获取用户和组信息的方式,显然该类中默认使用从文本中读取字符串的方式来构造。

对于UnixUserGroupInformation类实例的构造,该类给出了四个方法:

该类实现了其抽象基类定义的两个抽象方法,用来获取用户名和组名,如下所示:

UserGroupInformation抽象类实现了org.apache.hadoop.io.Writable接口,并没有在其中实现序列化操作的两个方法,所以在其子类UnixUserGroupInformationg给出了实现,如下:

 下面两个方法,将用户和组的信息以字符串的形式存到Hadoop的配置类Configuration实例中,也能从一个给定的Configuration类实例中读取出来:

与执行Unix系统的Shell命令相关的三个方法,介绍如下:

 上面三个方法能够模拟执行Unix系统的Shell命令,与Hadoop框架中实现的工具类org.apache.hadoop.util.Shell类密切相关,执行Unix系统的Shell命令的实现有一点点复杂,可以参考其工具类实现。

上面分析与登录系统之前用户和组信息的获取实现。当一个用户具备了充分的信息,可以登录文件系统进行特定的操作。下面就分析执行登录的过程了,有三个实现方法,基本原理都是一致的,下面给出这三个方法的声明及其说明: 

 最后,该类还有一个用于比较两个UGI是否相同的方法public boolean equals(Object other)。

 总结一下,UnixUserGroupInformation类主要对登录前的用户名和组名信息进行格式化,使用两种方式来获取:

1、通过从Hadoop的配置类实例中获取到用户名和组名;

2、模拟执行Unix系统Shell命令获取到 用户名和组名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值