Hadoop:hdfs文件permission denied问题解析
2024-10-11 18:17:38
Cron jobs can be scheduled, but fail to write parquet file and seems due to user permission of “yarn”.
: org.apache.hadoop.security.AccessControlException: Permission denied: user=yarn, access=WRITE,
inode="/user/spark/eea/trip/tripetl.parquet/key=2017101012/version=1730/_temporary/0":spark:hdfs:drwxr-xr-x
观察报错的主要信息:
user=yarn, access=WRITE
用户yarn在改文件上执行写操作时被权限系统拒绝, parquet文件的权限为755
Hadoop分布式文件系统实现了一个和POSIX系统类似的文件和目录的权限模型。每个文件和目录有一个所有者(owner)和一个组(group)。文件或目录对其所有者、同组的其他用户以及所有其他用户分别有着不同的权限。对文件而言,当读取这个文件时需要有r权限,当写入或者追加到文件时需要有w权限。对目录而言,当列出目录内容时需要具有r权限,当新建或删除子文件或子目录时需要有w权限,当访问目录的子节点时需要有x权限。每个访问HDFS的用户进程的标识分为两个部分,分别是用户名和组名列表。每次用户进程访问一个文件或目录foo,HDFS都要对其进行权限检查:
1、如果用户即foo的所有者,则检查所有者的访问权限rwx;
2、如果foo关联的组在组名列表中出现,则检查组用户的访问权限r-x;
3、否则检查foo其他用户的访问权限r-x。
yarn和spark是同属一个组hdfs, 因此对该文件具有r-x的权限,没有W权限,因此报错
解决方法:
方式一:
在系统环境变量或者shell脚本中增加HADOOP_USER_NAME,其值为yarn;
export HADOOP_USER_NAME=yarn
或者 通过程序动态添加,如下:
System.setProperty("HADOOP_USER_NAME", "yarn");
或者在oozie里面workflow.xml中添加
<env-var>HADOOP_USER_NAME=hdfs</env-var>
具体请参考:
http://blog.csdn.net/lw_ghy/article/details/51469996
https://stackoverflow.com/questions/31450828/oozie-job-wont-run-if-using-pyspark-in-sparkaction/33094709#33094709
https://community.hortonworks.com/articles/26593/permission-denied-useryarn-accesswrite-oozie-shell.html
https://community.hortonworks.com/questions/10949/permission-denied-for-user-while-creating-a-hive-t.html
https://stackoverflow.com/questions/29559188/oozie-launching-mr-jobs-as-yarn-user-instead-of-given-user-name#
https://stackoverflow.com/questions/30926357/oozie-on-yarn-oozie-is-not-allowed-to-impersonate-hadoop
方式二:
由于yarn对"/user/spark"目录没有写入权限,所以导致异常的发生。解决方法即开放hadoop中的HDFS目录的权限,命令如下:sudo -u hdfs hdfs dfs -chmod -R 775 /user/spark 。
方式三:
修改hadoop的配置文件:conf/hdfs-site.xml,修改 fs.permissions.umask-mode 的值。
<property>
<name>fs.permissions.umask-mode</name>
<value></value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hdfs</value>
</property>
hdfs创建文件和目录时使用的umask,默认值为八进制022(即755),每位数字对应了拥有者,组和其他用户。即:drwxr-xr-x
HDFS中超级用户与通常熟悉的Linux或Unix中的root用户不同,HDFS的超级用户是与NameNode进程有相同标示的用户。HDFS的超级用户不必是NameNode主机的超级用户。参数dfs.permissions.superusergroup设置了超级用户组,该组中的所有用户也为超级用户。超级用户在HDFS中可以执行任何操作,而针对超级用户的权限检查永远不会失败。
具体请参考:
http://www.cnblogs.com/jishilei/archive/2012/12/27/2835188.html
http://blog.csdn.net/skywalker_only/article/details/40709447
方式四:
将各个提交程序的用户名称统一为spark,即与服务器上文件所属的用户一致。
最新文章
- 安全防范:nginx下git引发的隐私泄露问题
- app开发项目简单的结构一
- C++_系列自学课程_第_4_课_string_《C++ Primer 第四版》
- Python requests 为pfsense 添加Routes
- 第二章 centos安装maven
- 欧几里德算法 GCD
- 寻找研究基于NS2研究覆盖网络的小伙伴:)
- [Solution] ASP.NET Identity(1) 快速入门
- URAL 1183 Brackets Sequence(DP)
- MyEclipse 利用反向功能生成Java 实体类
- Ios 程序封装,安装流程
- 编程语言中的Namespace
- 什么是Ajax? (转载于疯狂客的BLOG)
- 2C 产品的本质是人性,2B 产品的背后是业务(转)
- 深入研究Node.js的底层原理和高级使用
- EBS客户化迁移SQL
- java使用java.lang.management监视和管理 Java 虚拟机
- Python3 tkinter基础 Canvas bind 鼠标左键点击时,在当前位置画椭圆形
- sql产生随机时间
- MySQLi基于面向对象的编程
热门文章
- BZOJ.2726.[SDOI2012]任务安排(DP 斜率优化)
- Win7系统 mstsc远程桌面连接失败,提示“您的凭据不工作” 或者“无法连接到远程计算机”的问题。
- npm install出错,npm ERR! code EINTEGRITY npm ERR! Verification failed while extracting url-parse@1.4.3
- ZOJ3951 : Independent Set
- windows配置java运行环境
- Java基础知识总结--String、StringBuffer、StringBuilder
- 使用pycharm以及用pycharm句子切分调试
- SSH报错
- pygame-KidsCanCode系列jumpy-part15-PowerUp加速器
- Java知识回顾 (10) 线程