hadoop2.7.2学习笔记08-代理用户(超级用户以其他用户的名义执行操作)

本文介绍如何在Hadoop中配置超级用户以代理普通用户执行任务。通过特定的配置项允许超级用户代表其他用户操作HDFS文件系统及提交作业。

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

1、场景

假设一个超级用户super想要以一个名为joe的用户的名义向hdfs提交作业。super使用kerberos认证,但joe并没有。这要求joe可以使用超级用户认证过了的连接,来操作namenode和job tracker。

这个场景在Apache Oozie中可能会发生。

示例代码:

...
    //Create ugi for joe. The login user is 'super'.
    UserGroupInformation ugi =
            UserGroupInformation.createProxyUser("joe", UserGroupInformation.getLoginUser());
    ugi.doAs(new PrivilegedExceptionAction<Void>() {
      public Void run() throws Exception {
        //Submit a job
        JobClient jc = new JobClient(conf);
        jc.submitJob(conf);
        //OR access hdfs
        FileSystem fs = FileSystem.get(conf);
        fs.mkdir(someFilePath);
      }
    }

登录使用的是超级用户,代理用户对象向ugi以joe的名义被创建。doAs中的操作是以joe的名义执行的。

2、配置

在core-site.xml中通过hadoop.proxyuser.$superuser.hostshadoop.proxyuser.$superuser.groupshadoop.proxyuser.$superuser.users.等参数可以配置代理用户

下面的配置中,从主机host1和主机host2连接的super可以伪装成一个属于group1和group2的用户。

   <property>
     <name>hadoop.proxyuser.super.hosts</name>
     <value>host1,host2</value>
   </property>
   <property>
     <name>hadoop.proxyuser.super.groups</name>
     <value>group1,group2</value>
   </property>
下面的配置中使用了通配符,从任何主机登录的oozie用户可以伪装成一个属于任何group的用户

  <property>
    <name>hadoop.proxyuser.oozie.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.oozie.groups</name>
    <value>*</value>
  </property>
hadoop.proxyuser.$superuser.hosts中可以配置ip地址,CIDR格式的ip地址和主机名

   <property>
     <name>hadoop.proxyuser.super.hosts</name>
     <value>10.222.0.0/16,10.113.221.221</value>
   </property>
   <property>
     <name>hadoop.proxyuser.super.users</name>
     <value>user1,user2</value>
   </property>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值