我正在尝试使用 PigStorage 从 hdfs 加载 csv 文件,限制输出 bt 一条记录并转储。
我的 hdfs 快照:
我正在从属机器上运行一个 2 节点集群,其中有 1 个主节点(NN 和 Sec NN)和 1 个数据节点和作业跟踪器。
我的猪脚本在数据节点上运行。
使用根用户
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”上执行时权限被拒绝。
但是我当前的用户是我正在运行 pig 的 root 并且我的 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-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,现在同样的旧权限被拒绝异常又回来了。
能否请你帮忙。