7

我试图让 Apache Pig 在我的 Hadoop 集群上启动并运行,但遇到了权限问题。Pig 本身正在启动并很好地连接到集群——从 Pig shell 中,我可以ls通过和围绕我的 HDFS 目录。但是,当我尝试实际加载数据并运行 Pig 命令时,我遇到了与权限相关的错误:

grunt> A = load 'all_annotated.txt' USING PigStorage() AS (id:long, text:chararray, lang:chararray);
grunt> DUMP A;
2011-08-24 18:11:40,961 [main] ERROR org.apache.pig.tools.grunt.Grunt - You don't have permission to perform the operation. Error from the server: org.apache.hadoop.security.AccessControlException: Permission denied: user=steven, access=WRITE, inode="":hadoop:supergroup:r-xr-xr-x
2011-08-24 18:11:40,977 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias A
Details at logfile: /Users/steven/Desktop/Hacking/hadoop/pig/pig-0.9.0/pig_1314230681326.log
grunt> 

在这种情况下,all_annotated.txt是我创建的 HDFS 主目录中的一个文件,并且绝对有权限;无论我尝试使用什么文件,都会出现同样的问题load。但是,我不认为这是问题所在,因为错误本身表明 Pig 正在尝试在某处写入。谷歌搜索,我发现一些邮件列表帖子表明某些 Pig Latin 语句(order等)需要对 HDFS 文件系统上的临时目录的写访问权限,该目录的位置由hadoop.tmp.dirhdfsd-site.xml 中的属性控制。我认为不属于 load该类别,但可以肯定的是,我更改hadoop.tmp.dir为指向我的 HDFS 主目录中的一个目录,但问题仍然存在。

那么,有人对可能发生的事情有任何想法吗?

4

2 回答 2

13

可能是您的 pig.temp.dir 设置。它在 hdfs 上默认为 /tmp。Pig 将在那里写入临时结果。如果你没有 /tmp 的权限,Pig 会抱怨。尝试通过 -Dpig.temp.dir 覆盖它。

于 2011-08-26T06:51:23.790 回答
0

问题可能是hadoop.tmp.dir本地文件系统上的目录,而不是 HDFS。尝试将该属性设置为您知道您具有写入权限的本地目录。我在 Hadoop 中使用常规 MapReduce 遇到了同样的错误。

于 2011-08-25T16:53:11.717 回答