我正在尝试在我的Hadoop集群上运行Apache Pig,并且遇到了权限问题。 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拉丁语句(order
等)需要对HDFS文件系统上临时目录的写访问权,该文件系统的位置由hadoop.tmp.dir
属性控制在hdfsd-site.xml中。我不认为 load
属于该类别,但为了确保,我将hadoop.tmp.dir
更改为指向我的HDFS主目录中的目录,并且问题仍然存在
那么,那里的任何人对于可能发生的事情都有任何想法?
答案 0 :(得分:13)
可能是你的pig.temp.dir设置。它在hdfs上默认为/ tmp。猪会在那里写临时结果。如果你没有/ tmp的许可,猪会抱怨。尝试通过-Dpig.temp.dir覆盖它。
答案 1 :(得分:0)
问题可能是hadoop.tmp.dir
是本地文件系统上的目录,而不是HDFS。尝试将该属性设置为您知道您具有写入权限的本地目录。我在Hadoop中使用常规MapReduce遇到了同样的错误。