我正在尝试使用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的许可,现在同样的旧许可拒绝异常回来了。
你能帮忙吗?答案 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
然后应更改所有文件权限。