11.hadoop-2.7.2官网文档翻译-代理用户-超级用户对其他用户的代表

作者: 疯狂小兵 | 2016-07-14 | 阅读
「编辑」 「本文源码」

介绍

该文档描述了一个超级用户怎样代表另一个用户提交任务或访问HDFS。

使用案例

下一节描述的代码示例适用于以下用例。

用户名为super的超级用户想要代表用户joe提交任务和访问HDFS。该超级用户有kerberos认证,但是用户joe没有。 该任务需要作为用户joe运行并且NameNode上任何文件的访问都要作为用户joe去做。 这需要用户joe可以使用超级用户的kerberos认证连接NameNode或者Job Tracker连接。换句话说,超级用户在扮演用户joe

其他产品比如apache Oozie也需要这样。

代码示例

在该例子中super的认证将被用于登录,代理用户ugi对象将会为joe创建。

该代理用户ugi对象的方法doAs是扮演的操作。

//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);
  }
}

配置

你可以使用属性hadoop.proxyuser.$superuser.hosts配置代理用户,同时配置hadoop.proxyuser.$superuser.groupshadoop.proxyuser.$superuser.users全部或其中一个。

如下方式指定core-site.xml,只能来自host1,和host2超级用户super来模仿组group1group2的用户。

   <property>
     <name>hadoop.proxyuser.super.hosts</name>
     <value>host1,host2</value>
   </property>
   <property>
     <name>hadoop.proxyuser.super.groups</name>
     <value>group1,group2</value>
   </property>

如果这些配置不存在,扮演将不会被允许,连接也会失败。

如果安全性要求不高,通配符*可以用以允许所有的主机所有用户。 举例说明,如下在core-site.xml中指定,从任何主机访问的用户oozie可以扮演任何组的任何用户。

 <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地址范围,主机名。

比如,像下面指定的,来自在10.222.0.0-15范围和10.113.221.221的注解可以扮演用户user1user2

 <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>

附加说明

如果集群运行在安全模式,超级用户必须有kerberos证书才能扮演其他用户。

这个特性不能使用授权令牌。如果超级用户将它拥有的授权令牌添加到带里用户ugi会报错,但是这将允许代理用户连接到具有超级用户特权的服务。

然而,如果超级用户不想将授权令牌给joe,必须首先扮演joe然后为joe获取一个授权令牌。就像上面的代码示例一样的方式,将其添加到joe的ugi。 在这种方式下,授权令牌将会拥有像joe一样的拥有者。


版权声明:本文由 在 2016年07月14日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《11.hadoop-2.7.2官网文档翻译-代理用户-超级用户对其他用户的代表》




  相关文章:

「游客及非Github用户留言」:

「Github登录用户留言」:

TOP