博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop中的ProxyUser
阅读量:6421 次
发布时间:2019-06-23

本文共 2736 字,大约阅读时间需要 9 分钟。

  hot3.png

本文为转帖,原文地址为 该文章很详细的描述了PROXYUSER的原理,流程,应用场景和配置,非常的全面和详细。

PROXYUSER介绍和应用场景

Hadoop2.0版本开始支持ProxyUser的机制。含义是使用User A的用户认证信息,以User B的名义去访问hadoop集群。对于服务端来说就认为此时是User B在访问集群,相应对访问请求的鉴权(包括HDFS文件系统的权限,YARN提交任务队列的权限)都以用户User B来进行。User A被认为是superuser(这里super user并不等同于hdfs中的超级用户,只是拥有代理某些用户的权限,对于hdfs来说本身也是普通用户),User B被认为是proxyuser。

在Hadoop的用户认证机制中,如果使用的是Simple认证机制,实际上ProxyUser的使用意义并不大,因为客户端本身就可以使用任意用户对服务端进行访问,服务端并不会做认证。而在使用了安全认证机制(例如Kerberos)的情况下,ProxyUser认证机制就很有作用:

  1. 用户的管理会比较繁琐,每增加一个新的用户,都需要维护相应的认证信息(kerberosKeyTab),使用ProxyUser的话,只需要维护少量superuser的认证信息,而新增用户只需要添加proxyuser即可,proxyuser本身不需要认证信息。

  2. 通常的安全认证方式,适合场景是不同用户在不同的客户端上提交对集群的访问;而实际应用中,通常有第三方用户平台或系统会统一用户对集群的访问,并且执行一系列任务调度逻辑,例如Oozie、华为的BDI系统等。此时访问集群提交任务的实际只有一个客户端。使用ProxyUser机制,则可以在这一个客户端上,实现多个用户对集群的访问。

pic1

使用ProxyUser访问hadoop集群,访问请求的UGI对象中实际包含了以下信息:

  1. proxyUser用户名
  2. superUser用户名
  3. superUser的认证信息(kerberos等安全认证模式下) 而非ProxyUser方式访问,UGI中只包含了普通用户及其认证信息。 通过ProxyUser方式访问hadoop集群,认证鉴权流程如下:

pic2

  1. 对SuperUser进行认证,在Simple认证模式下直接通过认证,在Kerberos认证模式下,会验证ticket的合法性。

  2. 代理权限认证,即认证SuperUser是否有权限代理proxyUser。这里权限认证的逻辑的实现可以通过hadoop.security.impersonation.provider.class参数指定。在默认实现中通过一系列参数可以指定每个SuperUser允许代理用户的范围。

  3. 访问请求鉴权,即验证proxyUser是否有权限对集群(hdfs文件系统访问或者yarn提交任务到资源队列)的访问。这里的鉴权只是针对proxyUser用户而已经与SuperUser用户无关,及时superUser用户有权限访问某个目录,而proxyUser无权限访问,此时鉴权也会返回失败。

PROXYUSER的使用和相关配置

ProxyUser对象通过UserGroupInformation.createProxy(“proxyUser”,superUgi)来创建,访问集群时通过proxyUser.doAs方式进行调用。

示例代码:

// 创建superUser用户	UserGroupInformationsuperUser = UserGroupInformation.getCurrentUser();	//创建proxyUser用户	UserGroupInformationproxyUgi = UserGroupInformation.createProxyUser(“proxyUser”, superUser);	// 使用proxyUser用户访问集群	proxyUgi.doAs(new PrivilegedExceptionAction
() { @Override public Void run() throws Exception { // 使用proxy用户访问hdfs FileSystemfs = FileSystem.get(conf); fs.mkdirs(new Path(“/proxyUserDir”)); // 使用proxy用户提交mr作业 JobClientjc = new JobClient(conf); jc.submitJob(conf); return null; } });

服务端需要在NameNode和ResourceManager的core-site.xml中进行代理权限相关配置。 对于每一个superUser用户,配置参数:

配置 说明
hadoop.proxyuser.$superuser.hosts 配置该superUser允许通过代理访问的主机节点
hadoop.proxyuser.$superuser.groups 配置该superUser允许代理的用户所属组
hadoop.proxyuser.$superuser.users 配置该superUser允许代理的用户

对于每个superUser用户,hosts必须进行配置,而groups和users至少需要配置一个。

这几个配置项的值都可以使用*来表示允许所有的主机/用户组/用户。

例如:

hadoop.proxyuser.userA.hosts
*
hadoop.proxyuser.userA.users
user1,user2

表示允许用户userA,在任意主机节点,代理用户user1和user2

代理用户权限相关配置的改动,需要修改core-site.xml文件中相关配置。修改后配置并不会自动更新到服务器(这与fair-scheduler.xml配置会自动更新不同)。修改配置后需要执行以下命令进行同步,分别将信息更新到namenode和resourcemananger上。

hdfs dfsadmin –refreshSuperUserGroupsConfiguration

yarn rmadmin –refreshSuperUserGroupsConfiguration

转载于:https://my.oschina.net/OttoWu/blog/806814

你可能感兴趣的文章
使用putty远程连接linux
查看>>
【comparator, comparable】小总结
查看>>
Node 版本管理
查看>>
34、重分布配置实验之分发列表distribute-list
查看>>
命令模式-对象行为型
查看>>
VS2017配置、提高生产力、代码辨识度 (工欲善其事必先利其器)新手必备!
查看>>
[Phoenix] 七、如何使用自增ID
查看>>
replication监控及自动故障切换
查看>>
路由基本配置(上)
查看>>
windows上传文件到linux乱码解决
查看>>
Dao 常用方法记录
查看>>
fpm打包zabbix-agent
查看>>
Windows Server 2016 DNS Policy Split-Brain 3
查看>>
用脚本实现1+2+3...100
查看>>
pythopn List(列表)
查看>>
blat命令行发邮件小工具
查看>>
学习笔记 十五: mariadb
查看>>
学习笔记 124: 预备知识总结
查看>>
windows server之AD(1)
查看>>
如何升级PowerShell
查看>>