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

来源:互联网 发布:拓扑康102n 导入数据 编辑:程序博客网 时间:2024/05/17 22:01

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>


0 0
原创粉丝点击