除安装hadoop的用户、root用户之外的所有用户执行 jar 时,均出现如下错误。
Exception in thread "main" java.io.IOException: 权限不够
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:1879)
at org.apache.hadoop.util.RunJar.main(RunJar.java:115)
这是因为hadoop在执行job时,会将作业jar文件,配置文件和计算所得的输入划分复制到 {mapred.system.dir} 目录下的一个以作业ID号命名的目录中(摘自hadoop权威指南),例如会有如下文件,例如:
hadoop-default.xml 的参数{mapred.system.dir} 的默认值是{hadoop.tmp.dir}/mapred/system
因此,我们需要修改 {mapred.system.dir} 目录的权限,让其它用户也能写。
我们给出一个正常运行的集群的权限是:
因此,我们也可以将 {mapred.system.dir} 目录权限设置为 733, 即其它用户可以写, 但不能读.
hadoop fs -chmod 733 /hadoop/tmp/mapred/system