立即注册 登录
About云-梭伦科技 返回首页

pig2的个人空间 https://www.aboutyun.com/?61 [收藏] [复制] [分享] [RSS]

日志

hadoop代理用户 -超级用户代理其它用户

热度 1已有 4989 次阅读2015-12-9 18:03 | 用户

问题导读
1.你认为什么情况下使用代理用户?
2.代理用户与普通用户的区别是什么?
3.如何配置超级用户代理其它用户?

原文链接:
hadoop代理用户 -超级用户代理其它用户



说明
这个文档描述怎么使用超级用户提交job和代理其它用户访问hdfs


用例
下一节中描述的代码示例适用于以下用例。
超级用户‘super’ 代理用户joe提交job和访问hdfs,超级用户有kerberos认证,用户joe没有。任务需要运行用户joe和任何文件访问NameNode需要用户joe。它需要用户joe连接namenode或则job tracker使用super的kerberos凭据的连接认证,换句话说,超级用户模拟【冒充】用户joe

代码示例
在这个例子中超级的凭证用于登录和创建一个代理用户ugi对象为joe。这个操作实现了代理用户ugi对象的doAs方法

[Bash shell] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
...
  //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.groups 和adoop.proxyuser.$superuser.users.通过指定如下 core-site.xml,超级用户super冒充用户属于group1 和 group2,仅能连接 host1 和 host2
[Bash shell] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
<property>
     <name>hadoop.proxyuser.super.hosts</name>
     <value>host1,host2</value>
   </property>
   <property>
     <name>hadoop.proxyuser.super.groups</name>
     <value>group1,group2</value>
   </property>

如果没有配置这些,冒充不被允许,连接失败。更宽松的不严格的安全性,通配符的值*允许代理任何用户,任何host。比如通过以下core-site.xml,用户oozie访问任何host,可以代理任何用户所属的任何组
[Bash shell] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
<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地址范围。比如以下,用户super 访问主机ip地址范围 10.222.0.0-15 到 10.113.221.221,可以代理 user1 和 user2.
[Bash shell] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
<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凭据才能代理另一个用户。它不能使用委托tokens功能,如果超级用户添加自己的委托token到代理用户ugi这是错误的,它允许代理用户连接到具有超级用户的特权服务。尽管如此,如果超级用户确实想委托token给joe用户,它必须首先代理joe,得到joe的委托token,同样的方法如上面代码示例,添加它到joe的ugi,以这样的方式委托token属于joe.

路过

雷人

握手

鲜花

鸡蛋

发表评论 评论 (1 个评论)

回复 廉兵兵 2016-11-27 15:37
看不懂,

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条