Pig - 地图缩小模式中的权限被拒绝

时间:2013-09-26 22:02:20

标签: hadoop apache-pig hdfs

我正在尝试使用PigStorage从hdfs加载csv文件,限制输出bt一条记录并转储。

我的hdfs快照:

我正在运行一个2节点集群,其中包含1个主节点(NN& Sec NN)& 1个数据节点&奴隶机器上的工作追踪器。

我的猪脚本在数据节点上运行。

使用root用户

grunt> x= load '/user/hadoop/input/myfile.csv' using PigStorage(',') as (colA:chararray);
grunt> y = limit x 1;                                                                                 
grunt> dump y;

控制台日志:

> HadoopVersion   PigVersion      UserId  StartedAt               FinishedAt    
> Features
> 1.0.4           0.11.1          root    2013-09-26 17:35:18     2013-09-26 17:35:47     LIMIT
> 
> Failed!
> 
> Failed Jobs: JobId   Alias   Feature Message Outputs
> job_201309190323_0019   x,y             Message: Job failed! Error -
> JobCleanup Task Failure, Task: task_201309190323_0019_m_000002

我收到权限被拒绝错误,而日志是

org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop, access=EXECUTE, inode="hadoop-root":root:supergroup:rwx------

表示当用户“hadoop”尝试在文件夹“hadoop-root”上执行时,权限被拒绝。

但是我现在的用户是root用户,我正在运行pig&我的namenode正在使用用户hadoop(我希望超级用户)

运行

**为什么日志显示user = hadoop而不是root。我做错了什么**

hdfs的快照:

    [hadoop@hadoop-master ~]$ hadoop fs -ls /
    Warning: $HADOOP_HOME is deprecated.

    Found 2 items
    drwx------   - hadoop supergroup          0 2013-09-26 17:29 /tmp
    drwxr-xr-x   - hadoop supergroup          0 2013-09-26 14:20 /user
----------------------------------------------------------------------------------------
    [root@hadoop-master hadoop]# hadoop fs -ls /user
    Warning: $HADOOP_HOME is deprecated.

    Found 2 items
    drwxr-xr-x   - hadoop supergroup          0 2013-09-26 14:19 /user/hadoop
    drwxr-xr-x   - root   root                0 2013-09-26 14:33 /user/root
----------------------------------------------------------------------------------------    
    [hadoop@hadoop-master ~]$ hadoop fs -ls /tmp
    Warning: $HADOOP_HOME is deprecated.

    Found 15 items
    drwx------   - hadoop supergroup          0 2013-09-19 01:43 /tmp/hadoop-hadoop
    drwx------   - root   supergroup          0 2013-09-19 03:25 /tmp/hadoop-root
    drwxr-xr-x   - hadoop supergroup          0 2013-09-26 17:29 /tmp/temp-1036150440
    drwxr-xr-x   - root   supergroup          0 2013-09-26 17:27 /tmp/temp-1270545146
    drwx------   - root   supergroup          0 2013-09-26 14:51 /tmp/temp-1286962351
    drwx------   - hadoop supergroup          0 2013-09-26 14:12 /tmp/temp-1477800537
    drwx------   - hadoop supergroup          0 2013-09-26 15:25 /tmp/temp-1503376062
    drwx------   - root   supergroup          0 2013-09-26 14:09 /tmp/temp-282162612
    drwx------   - root   supergroup          0 2013-09-26 17:22 /tmp/temp-758240893
    drwx------   - root   supergroup          0 2013-09-26 15:00 /tmp/temp1153649785
    drwx------   - root   supergroup          0 2013-09-26 13:35 /tmp/temp1294190837
    drwx------   - root   supergroup          0 2013-09-26 13:42 /tmp/temp1469783962
    drwx------   - root   supergroup          0 2013-09-26 14:45 /tmp/temp2087720556
    drwx------   - hadoop supergroup          0 2013-09-26 14:29 /tmp/temp2116374858
    drwx------   - root   supergroup          0 2013-09-26 16:55 /tmp/temp299188455

我甚至试图关闭权限检查(我的两个节点上的core-site.xml中的dfs.permissions),如上所述Permission denied at hdfs 重启了我所有的hadoop服务。但仍然没有运气。

根据日志,我尝试了

  

hadoop fs -chmod -R 777 / tmp

因为我发现hadoop-root(根据上面的日志没有权限)将在hdfs中的/ tmp目录下。

但是在更改权限后我得到了不同的例外。

Message: java.io.IOException: The ownership/permissions on the staging directory hdfs://hadoop-master:9000/tmp/hadoop-root/mapred/staging/root/.staging is not as expected. It is owned by root and permissions are rwxrwxrwx. The directory must be owned by the submitter root or by root and permissions must be rwx------

所以,我恢复了对hadoop fs -chmod -R 700 / tmp的许可,现在同样的旧许可拒绝异常回来了。

你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

最后我能够解决这个问题。

我的HDFS中的/ tmp文件没有适当的权限。当我的hdfs中已有一些文件时,我试图将权限更改为1777(粘性位)。但那没用。

作为试验&错误,我使用-copyToLocal备份了我的hdfs到我的本地文件系统并删除了我的所有文件,包括/ tmp文件夹。

这次我以适当的权限重新创建了/ tmp目录。

  

hadoop fs -chmod 1777 / tmp

我使用-put命令将我的所有文件再次复制到hdfs。

这一次,我在第一篇文章中的猪脚本就像魅力一样。

我检查了/ tmp / hadoop-root / mapred / staging的权限,将其设置为应该是什么。

  

drwxrwxrwx

希望这有助于任何面临同样问题的人。

干杯

答案 1 :(得分:0)

sudo su - hdfs

一旦你以“hdfs”用户身份运行,那么你应该能够运行

hadoop fs -chmod -R 777 /tmp

然后应更改所有文件权限。