Hadoop mapred(hive)执行目录 文件权限问题(2)

at org.apache.hadoop.ipc.Client.call(Client.java:1030)
        at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:224)
        at $Proxy5.mkdirs(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)
        at $Proxy5.mkdirs(Unknown Source)
        at org.apache.hadoop.hdfs.DFSClient.mkdirs(DFSClient.java:992)
        ... 18 more
  在将/tmp 和/tmp/hive-wangqiang的全新修改为777后:
                          bin/hadoop fs -chmod 777 /tmp/hive-hadoop-user2
                          bin/hadoop fs -chmod 777 /tmp/
  错误信息为:Failed with exception java.io.IOException:org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop-user2, access=EXECUTE, inode="dw":hadoop-user1:supergroup:rw-r--r--
    最后将hive external表数据目录权限改为777后,查询才恢复正常。
    但是该用户在执行需要mapred的hql时,报错信息如下:
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop-user2, access=EXECUTE, inode="hadoop-hadoop-user1":hadoop-user1:supergroup:rwx------
  上述日志信息的意思是mapred作业在/tmp/目录下的文件夹hadoop-rsync权限拒绝用户wangqiang的执行访问。但是将该文件下面的权限更改到其他权限组合是,以rsync用户提交的mapred作业报错:permissions must be rwx------
    在仔细查看了/tmp/hadoop-rsync文件夹下面的目录结构后,发现了问题的关键所在:
[hadoop-user1@oser-624 hadoop-0.20.203.0]$ bin/hadoop fs -ls /tmp/hadoop-hadoop-user1/mapred/staging
Found 2 items
drwx------  - hadoop-user1    supergroup          0 2011-10-19 18:18 /tmp/hadoop-hadoop-user1/mapred/staging/hadoop-user1
drwx------  - hadoop-user2 supergroup          0 2011-10-27 18:38 /tmp/hadoop-hadoop-user1/mapred/staging/hadoop-user2
  原来不同用户提交的作业是在 /tmp/hadoop-hadoop-user1/mapred/staging/目录下以用户名区分,而之前的修改是直接使用-R选项直接修改/tmp/hadoop-rsync目录下的所有权限导致的错误,执行以下权限修改命令:
[hadoop-user1@oser-624 hadoop-0.20.203.0]$ bin/hadoop fs -chmod 777  /tmp/hadoop-hadoop-user1/mapred/
[hadoop-user1@oser-624 hadoop-0.20.203.0]$ bin/hadoop fs -chmod 777  /tmp/hadoop-hadoop-user1/mapred/staging
[hadoop-user1@oser-624 hadoop-0.20.203.0]$ bin/hadoop fs -chmod 777  /tmp/hadoop-hadoop-user1/
[hadoop-user1@oser-624 hadoop-0.20.203.0]$ bin/hadoop fs -chmod 777  /tmp
  hive查询正常。

最近又遇上了这个问题,但是按照上面的方法修改后没能解决,于是查看namenode的日志:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0b6d658fe2838049a9e4eea9a9e3a8dc.html