我正在尝试执行一个jar文件,在PHP服务器上对我的HBase数据库进行简单查询,这样我就可以将结果打印到网页上。
PHP服务器配置了与hadoop用户相同的用户名,以及同一组。
PHP exec命令是:
exec("bash /usr/local/hadoop/bin/hadoop jar myjar.jar my.package.MyClass 2> php_error.log", $result);
当我尝试执行命令时(在php_error.log中)我得到此异常:
Exception in thread "main" java.io.IOException: Permission denied
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)
我知道它与权限相关,但即使在我的HDFS上使用777,也在hadoop安装文件夹上,它也无法正常工作。
有什么想法吗?谢谢。
此外,想要创建此临时文件的位置? Hadoop目录? HDFS?在哪里?
编辑: 在本地运行,它完美地运行!没有许可错误! hadoop jar myjar.jar my.package.MyClass
答案 0 :(得分:1)
您的PHP没问题。问题是,您正在运行的命令正在尝试将文件复制到hadoop.tmp.dir。它的默认位置是/tmp/hadoop-${user.name}
。您必须同时授予那个文件夹的权限,或者递归地提供完整的/tmp/hadoop
目录
修改强>
在这种情况下,弄清楚apache不是有效用户。解决方案是创建一个新用户,将其添加到hadoop组,设置jar的权限,以及hadoop.tmp.dir并将网页所有者更改为创建的用户