我试图在我的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 Latin语句(order
等)需要对HDFS文件系统上的临时目录具有写访问权限,其位置由hdfsd-site.xml中的hadoop.tmp.dir
属性控制。我不认为load
属于该类别,但为了确保,我将hadoop.tmp.dir
更改为指向我的HDFS主目录中的一个目录,但问题仍然存在。
那么,有没有人有任何想法是怎么回事?