从PHP服务器执行hadoop jar失败。没有权限

时间:2013-02-06 21:24:11

标签: php hadoop jar hbase

我正在尝试执行一个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

1 个答案:

答案 0 :(得分:1)

您的PHP没问题。问题是,您正在运行的命令正在尝试将文件复制到hadoop.tmp.dir。它的默认位置是/tmp/hadoop-${user.name}。您必须同时授予那个文件夹的权限,或者递归地提供完整的/tmp/hadoop目录

修改

在这种情况下,弄清楚apache不是有效用户。解决方案是创建一个新用户,将其添加到hadoop组,设置jar的权限,以及hadoop.tmp.dir并将网页所有者更改为创建的用户