hdfs的权限判断十分简单,就是拿发出指令的user name和文件的user name 做比较
  private void check(INode inode, FsAction access
      ) throws AccessControlException {
    if (inode == null) {
      return;
    }
    FsPermission mode = inode.getFsPermission();
 
    if (user.equals(inode.getUserName())) { //user class
      if (mode.getUserAction().implies(access)) { return; }
    }
    else if (groups.contains(inode.getGroupName())) { //group class
      if (mode.getGroupAction().implies(access)) { return; }
    }
    else { //other class
      if (mode.getOtherAction().implies(access)) { return; }
    }
    throw new AccessControlException("Permission denied: user=" + user
        + ", access=" + access + ", inode=" + inode);
  }
}
 
在多用户提交任务时遇到Permission denied, 的原因和任务提交的过程有关。
. 首先提交任务的客户端会把任务相关文件打包放在hadoop.tmp.dir中,这是本地目录,需要通过本地系统权限验证。由于是临时目录直接设置成为777就行.
2.  客户端会将任务文件打包写入hdfs的mapreduce.jobtracker.staging.root.dir + "/" + user + "/.staging" 目录,需要经过hdfs权限验证。通常可以选择两种方法解决。
1) 保持mapreduce.jobtracker.staging.root.dir为默认,将此目录chmod 777
2) 在hdfs的/user目录下建立用户目录,并且chown为该用户,相当于在hdfs下创建一个用户。
然后设置mapreduce.jobtracker.staging.root.dir为/user,  这是官方推荐的,可以看到这个属性的描述是这样写的:
The root of the staging area for users' job files In practice, this should be the directory where users' home directories are located (usually /user)。
3)有人说可以在启动任务时加入hadoop.job.ugi属性指定用户和群组。 我验证这样不行。看源码里也是直接获取
ugi = UserGroupInformation.getCurrentUser();不过看hdfs权限策略这操行应该可以设置。
 
还有一些如设置dfs.permissions参数关闭权限校验,改源码直接不校验之类的。。。
 
最后要注意,任务的out put需要当前用户拥有权限,不然还是不成功。设置成为用户目录就好了
 
另外,关于/tmp目录也要注意:
 ERROR org.apache.pig.impl.io.FileLocalizer - org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=shashaa, access=WRITE, inode="tmp":pwang7:supergroup:rwxr-xr-x
 碰到这种情况,当然是使用chmod把tmp目录的权限改为777了。
 
关于mapreduce.jobtracker.staging.root.dir
Parameter Value Description
mapred.system.dir /var/mapr/cluster/mapred/jobTracker/system The shared directory where MapReduce stores control files.
mapred.job.tracker.persist.jobstatus.dir /var/mapr/cluster/mapred/jobTracker/jobsInfo The directory where the job status information is persisted in a file system to be available after it drops of the memory queue and between jobtracker restarts.
mapreduce.jobtracker.staging.root.dir /var/mapr/cluster/mapred/jobTracker/staging The root of the staging area for users' job files In practice, this should be the directory where users' home directories are located (usually /user)
启动hadoop hdfs系统的用户即为超级用户,可以进行任意的操作。
 
如想让leaf用户也可执行hadoop的作业,执行如下操作:
 
用超级用户hadoop,创建文件    hadoop fs -mkdir /user/leaf
 
使用hadoop fs -chown 以及-chgrp 命令改变该文件的用户和用户组权限为leaf
 
在配置文件hdfs-site-xml 中添加项  dfs.permissions.enabled的值为 true
 
要保证leaf这个用户几个节点能ssh无密码相互登录,java环境变量没问题
 
这样leaf用户就可以提交任务数据到HDFS的/user/leaf目录中,并且可执行hadoop任务,
意如果不修改staging,任务仍旧无法提交,虽然这时候可以对hdfs的/user/leaf目录进行操作

HADOOP操作权限问题的更多相关文章

  1. hadoop操作权限问题:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    今天想从Eclipse向hdfs上传文件时遇到了一个权限问题,日志如下: ERROR hive.log: Got exception: org.apache.hadoop.security.Acces ...

  2. Hadoop操作hdfs的命令【转载】

    本文系转载,原文地址被黑了,故无法贴出原始链接. Hadoop操作HDFS命令如下所示: hadoop fs 查看Hadoop HDFS支持的所有命令 hadoop fs –ls 列出目录及文件信息 ...

  3. Tutorial 01_熟悉常用的Linux操作和Hadoop操作

    (一)熟悉常用的Linux 操作cd 命令:切换目录 (1) 切换到目录“/usr/local” (2) 切换到当前目录的上一级目录 (3) 切换到当前登录Linux 系统的用户的自己的主文件夹  ...

  4. 吴裕雄--天生自然HADOOP操作实验学习笔记:hdfs简单的shell命令

    实验目的 了解bin/hadoop脚本的原理 学会使用fs shell脚本进行基本操作 学习使用hadoop shell进行简单的统计计算 实验原理 1.hadoop的shell脚本 当hadoop集 ...

  5. 用最基本的EF+MVC+JQ+AJAX+bootstrap实现权限管理的简单实例 之登陆和操作权限

    先来一堆关于上篇文章的废话(不喜者点此隐藏) 今天把博客加了个小功能,就是点标题可以隐藏或展示相关内容,做法很傻,就是引用了bootstrap的两个css类和全部的js文件,其实这样的小功能完全应该自 ...

  6. 053医疗项目-模块五:权限设置-将用户操作权限写入Session

    权限管理指的是用户授权,与拦截器没有关系.拦截器只是一个技术,也可以用别的技术来实现的.别人问你权限管理,可不要和人家说什么拦截器.要说用户授权 前一篇文章是把实现了不同的用户呈现不用的菜单.这一篇文 ...

  7. RDIFramework.NET ━ 9.7 操作权限项管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.7 操作权限项管理 -Web部分 随着经济全球化趋势的发展和企业间竞争的加剧,企业对管理要求不断变化.提高,越来越多的信息都表 ...

  8. 【转】操作权限不够?教你开启Win7管理员帐户

    在Win7中进行一些设置,或修改某些文件时,经常会弹出当前帐户没有操作权限的提示,即使已经是管理员账户也不行.事实上,出于安全方面的考虑,默认情况下Win7系统的系统管理员Administrator账 ...

  9. 本地通过Eclipse链接Hadoop操作Mysql数据库问题小结

    前一段时间,在上一篇博文中描述了自己抽时间在构建的完全分布式Hadoop环境过程中遇到的一些问题以及构建成功后,通过Eclipse操作HDFS的时候遇到的一些问题,最近又想进一步学习学习Hadoop操 ...

随机推荐

  1. F-stack及其Nginx、redis的编译安装

    F-stack简介 F-stack粘合了dpdk.用户态协议栈和nginx.redis,弥补了dpdk没有协议栈的不足,并用nginx.redis提供了一个调用应用程序的接口. Quick Start ...

  2. linux内核追踪(trace)(QEMU+gdb)

    1.引言 Linux内核是一个很大的模块,如果只是看源码有时会难以理解Linux内核的一些代码设计情况,如果可以结合Linux内核运行同时阅读源码再好不过,本文大致介绍Linux内核追踪方式,采用工具 ...

  3. crobtab不执行定时任务的原因及解决办法

    服务未能启动或者权限问题.路径问题,网上很多种解决办法,就不多的说了. 1.查看crond日志: cat /var/log/cron 刚开始我的日志里面并没有执行写的脚本. 原因在于在脚本开始没有写s ...

  4. LeetCode39.组合总和 JavaScript

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制重复被选 ...

  5. [iOS]AVSpeechSynthesizer语音合成

    #import <AVFoundation/AVFoundation.h> // 初始化方法 AVSpeechSynthesizer *speech = [[AVSpeechSynthes ...

  6. Ubuntu16.04安装TensorFlow

    1.查看tensoflow与CUDA对应版本: windows端:https://tensorflow.google.cn/install/source_windows Linux端:https:// ...

  7. JQuery中ajaxSubmit,在ie或360兼容,提交后台不能获得参数

    问题描述:360兼容模式.IE浏览器,通过ajaxSubmit提交,后台不能获得参数值 解决办法:把options.semantic这个参数改成true 代码: var ajax_option={ s ...

  8. Delphi XE7调用Java Class,JAR

    Delphi XE5,XE6需要用户手工编译并将Classes.Dex加入到包中,不过Delphi XE7可以省掉这些工作了. 如何在XE7中调用Java,具体步骤如下: 1.将jar文件添加到XE7 ...

  9. C++的一些关键字用法

    const 这个关键字真是太常用了, 所以干脆总结一下. int const a = 8; //定义一个int常量a, 不能再给a赋值了 const int a = 8; //和上面一样 int co ...

  10. Titanic幸存预测分析(Kaggle)

    分享一篇kaggle入门级案例,泰坦尼克号幸存遇难分析. 参考文章: 技术世界,原文链接 http://www.jasongj.com/ml/classification/ 案例分析内容: 通过训练集 ...