我试图加载一个csv文件从hdfs使用pigstorage,限制输出bt一个记录和转储。
我的hdfs快照:
我正在一台从机上运行一个带有1个主节点(nn&secnn)和1个数据节点及作业跟踪器的2节点集群。
我的pig脚本在数据节点上运行。
使用根用户
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),正如前面提到的那样,在hdfs中被拒绝的权限重新启动了我的所有hadoop服务。但还是没有运气。
根据日志,我试着
hadoop fs-chmod-r 777/tmp
正如我所确定的,hadoop根目录(根据上面的日志,它没有权限)将位于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------
所以,我将权限恢复为hadoopfs-chmod-r700/tmp,现在同样的旧的permission-denied异常又回来了。
你能帮忙吗。
2条答案
按热度按时间xzabzqsa1#
一旦你以“hdfs”用户的身份运行,那么你应该能够运行
然后应更改所有文件权限。
yws3nbqq2#
我终于可以解决这个问题了。
我的/tmp文件在hdfs中没有适当的权限。当我的hdfs中已经有一些文件时,我尝试将权限更改为1777(粘性位)。但这并没有奏效。
作为一个尝试&错误,我使用-copytolocal将hdfs备份到本地文件系统,并删除了包括/tmp文件夹在内的所有文件。
这次我用适当的权限重新创建了/tmp目录。
hadoop fs-chmod 1777/tmp版本
我使用-put命令将所有文件再次复制到hdfs中。
这一次,我的Pig脚本,这是在第一个职位上工作的魅力。
我检查了/tmp/hadoop root/mapred/staging的权限,它被设置为应该的权限。
DRWXRWX图纸
希望这能帮助任何面临同样问题的人。
干杯