1

我正在尝试从 PHP 服务器执行一个 jar 文件来对我的 HBase 数据库进行简单查询,这样我就可以将结果打印到网页上。

PHP 服务器配置为与 hadoop 用户相同的用户名,以及相同的组。

PHP 执行命令是:

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 和 hadoop 安装文件夹上使用 777,它也不起作用。

有任何想法吗?谢谢你。

另外,这个临时文件要在哪里创建?Hadoop目录?高清晰度电视?在哪里?

编辑:在本地运行它,它工作得很好!没有权限错误!hadoop jar myjar.jar my.package.MyClass

4

1 回答 1

1

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

编辑:

在这种情况下,发现 apache 不是有效用户。解决方法是新建一个用户,加入hadoop组,设置权限为jar,hadoop.tmp.dir,将网页所有者改成创建的用户

于 2013-02-06T21:37:56.080 回答