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,即与服务器上文件所属的用户一致。

Hadoop:hdfs文件permission denied问题解析的更多相关文章

  1. kylin cube测试时,报错:org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x

    异常: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, i ...

  2. 访问HDFS报错:org.apache.hadoop.security.AccessControlException: Permission denied

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apac ...

  3. 报错:HDFS IO error org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/yk/dl/alarm_his":hdfs:supergroup:drwxr-xr-x

    报错背景: CDH集成了Flume服务,准备通过Flume将kafka中的数据放到HDFS中, 启动Flume的时候报错. 报错现象: // :: INFO hdfs.HDFSDataStream: ...

  4. 异常-Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hdfs, access=WRITE, inode="/hbase":root:supergroup:drwxr-xr-x

    1 详细异常 Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlExce ...

  5. 一脸懵逼加从入门到绝望学习hadoop之 org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=Administrator, access=WRITE, inode="/":root:supergroup:drwxr-xr报错

    1:初学hadoop遇到各种错误,这里贴一下,方便以后脑补吧,报错如下: 主要是在window环境下面搞hadoop,而hadoop部署在linux操作系统上面:出现这个错误是权限的问题,操作hado ...

  6. Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=lenovo, access=WRITE, inode="/user/hadoop/spark/people_savemode_test/_temporary/0":hadoop:supergro

    保存文件时权限被拒绝 曾经踩过的坑: 保存结果到hdfs上没有写的权限 通过修改权限将文件写入到指定的目录下 * * * $HADOOP_HOME/bin/hdfs dfs -chmod 777 /u ...

  7. Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=Mypc, access=WRITE, inode="/":fan:supergroup:drwxr-xr-x

    在window上编程提示没有写Hadoop的权限 Exception in thread "main" org.apache.hadoop.security.AccessContr ...

  8. Win下Eclipse提交Hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied: user=D

    描述:在Windows下使用Eclipse进行Hadoop的程序编写,然后Run on hadoop 后,出现如下错误: 11/10/28 16:05:53 INFO mapred.JobClient ...

  9. 从 &quot;org.apache.hadoop.security.AccessControlException:Permission denied: user=...&quot; 看Hadoop 的用户登陆认证

    假设远程提交任务给Hadoop 可能会遇到 "org.apache.hadoop.security.AccessControlException:Permission denied: use ...

随机推荐

  1. mysql查询根据时间排序

    表数据: mysql查询根据时间排序,如果有相同时间则只查询出来一个 所以需要再判断,如果时间相同,则根据id进行降序排序

  2. 洛谷P1309 瑞士轮(归并排序)

    To 洛谷.1309 瑞士轮 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平, ...

  3. 2017-9-11-Linux开机启动脚本

    参考文章:https://www.magentonotes.com/ubuntu-config-autostart-shell-script.html 还是先开门见山的说,Linux需要添加开机启动程 ...

  4. Java发邮件基础篇

    1. 电子邮件协议 电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP.其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP ...

  5. 考前停课集训 Day2 非

    因为太长了 所以一天一天分开发 Day2 昨天晚上没开黑车 没脱衣服就睡了 可能是我难受了…… 新的一天. 早上好. 我没去晨跑,早上先和团长集合了,没看见rkbudlo来 于是就先吃饭了 去机房的时 ...

  6. Java 深复制和浅复制

    浅复制是指复制对象时仅仅复制对象本身(包括对象中的基本变量),而不复制对象包含的引用指向的对象.深复制不仅复制对象本身,而且复制对象包含的引用指向的对象. 复制对象时需要调用Object类的clone ...

  7. UE4入门(一)软件安装教程

    基本的安装流程:下载并安装EpicInstaller=>登陆EpicLauncher并在UNREAL ENGINE标签中下载并安装引擎=>打开引擎创建新项目并测试 一 .下载并安装Epic ...

  8. Cocos Creator存储和读取用户数据--官方文档

    存储数据 cc.sys.localStorage.setItem(key, value) 上面的方法需要两个参数,用来索引的字符串键值 key,和要保存的字符串数据 value. 假如我们要保存玩家最 ...

  9. c# 后台绑定treeview 多个tab

    <wijmo:C1Tabs ID="C1Tab1" runat="server" ><%--OnSelectedChanged="& ...

  10. 学习Struts--Chap05:值栈和OGNL

    1.值栈的介绍 1.1 值栈的介绍: 值栈是对应每一个请求对象的数据存储中心,struts2会给每一个请求对象创建一个值栈,我们大多数情况下不需要考虑值栈在哪里,里面有什么,只需要去获取自己需要的数据 ...