hadoop常见问题——通过集群外服务器控制HDFS出现的permission denied权限问题

问题现象

通过Hadoop集群外的电脑操作HDFS时,提示permission denied。

原因分析

老版本hadoop可以通过设置hadoop.job.ugi属性来获取对hdfs的操作权限,但是Clouder CDH3B3开始后hadoop.job.ugi不再生效

解决办法

1、修改core-site.xml文件,增加以下两个属性

<property>

    <name>hadoop.proxyuser.[集群外电脑登录用户名].groups</name>

    <value>[能操作hdfs的集群用户名,多个用户之间用英文逗号间隔]</value>

    <description>Allow the superuser oozie to impersonate any members of the group group1 and group2 and so on</description>

  </property>

  <property>

    <name>hadoop.proxyuser.[集群外电脑登录用户名].hosts</name>

    <value>[允许操作hdfs的集群外服务器IP地址,多个地址之间用英文逗号间隔]</value>

    <description>The superuser can connect only from host1 and host2 and so on to impersonate a user</description>

  </property>

2、通过使用UserGroupInformation.doAs来实现对hdfs的操作,代码如下:

public static boolean createFile(final String path, final boolean overwrite)
   throws IOException {
  UserGroupInformation ugi = UserGroupInformation.createProxyUser(
    "hadoop", UserGroupInformation.getLoginUser());
  try {
   ugi.doAs(new PrivilegedExceptionAction<Void>() {
    public Void run() throws Exception {
     String uri = "hdfs://10.154.100.100:9000";
     Configuration conf = new Configuration();
     FileSystem fs = FileSystem.get(URI.create(uri), conf);
     Path f = new Path(path);
     fs.create(f, overwrite);
     fs.close();
     return null;
    }
   });
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  return true;
 }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值