Pig - 地图缩减模式下的权限被拒绝
Posted
技术标签:
【中文标题】Pig - 地图缩减模式下的权限被拒绝【英文标题】:Pig - Permission denied in map reduce mode 【发布时间】:2013-09-26 22:02:19 【问题描述】:我正在尝试使用 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),如提到的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,现在同样的旧权限被拒绝异常又回来了。
你能帮忙吗?
【问题讨论】:
对上述问题有什么帮助吗? 尝试将输入文件复制到 HDFS,然后在您的 pig 代码中从 HDFS 访问它。让我们知道进展如何。 嗯..我在 HDFS 本身中有输入文件并使用 pig 加载相同的文件。 【参考方案1】:我终于可以解决这个问题了。
我在 HDFS 中有我的 /tmp 文件,但没有适当的权限。当我的 hdfs 中已有一些文件时,我尝试将权限更改为 1777(粘性位)。但这不起作用。
作为一个试验和错误,我使用 -copyToLocal 将我的 hdfs 备份到我的本地文件系统并删除了我的所有文件,包括 /tmp 文件夹。
这次我用适当的权限重新创建了 /tmp 目录。
hadoop fs -chmod 1777 /tmp
然后我使用 -put 命令将所有文件再次复制到 hdfs 中。
这一次,我在第一篇文章中的猪脚本效果很好。
我检查了 /tmp/hadoop-root/mapred/staging 的权限,它设置为应有的值。
drwxrwxrwx
希望这对遇到同样问题的人有所帮助。
干杯
【讨论】:
您可以使用 setfacl 命令为特定用户设置特定文件夹的权限。【参考方案2】:sudo su - hdfs
一旦你以 'hdfs' 用户身份运行,那么你应该能够运行
hadoop fs -chmod -R 777 /tmp
然后应更改所有文件权限。
【讨论】:
以上是关于Pig - 地图缩减模式下的权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
MacOS Catalina 读写挂载无法在单用户或恢复模式下挂载,权限被拒绝
对象“sysobjects”、数据库“mssqlsystemresource”、模式“sys”的 SELECT 权限被拒绝