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

Posted

技术标签:

【中文标题】从 PHP 服务器执行 hadoop jar 失败。没有权限【英文标题】:Execute hadoop jar from PHP Server fails. Permission denied 【发布时间】:2013-02-06 21:24:11 【问题描述】:

我正在尝试执行一个 jar 文件以从 php 服务器对我的 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

【问题讨论】:

在我看来 jar 正在尝试制作文件的临时副本。可能您对保存副本的文件夹没有权限 我在我的服务器中创建了一个文件夹,将 jar 放入其中,并递归地赋予它完全权限。仍然收到此消息!恐怕与hadoop有关。 php 服务器必须以我认为的 hadoop 用户身份运行.. tmp 目录可以在文件系统上的任何位置,仅创建一个新文件夹并给予 recursiveley 完全权限是不够的。您必须找出您的 hadoop.tmp.dir 所在的位置 我知道 tmp 目录在哪里。接下来做什么?顺便说一句,在本地运行 jar(没有我的 php 服务器)时,它运行正常!! (查看我编辑后最后一行的内容) 我假设您在尝试此操作时没有使用您的 www-data 用户登录,对吗? 【参考方案1】:

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

编辑:

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

【讨论】:

我的 tmp 目录是 /app/hadoop/tmp ! app/hadoop 有 -R 777 权限。 /app 有 775 个权限。顺便说一句,谢谢伯恩哈德 还是不行?你确定没有 /tmp 目录吗?您是否以 root 身份登录? 不,我没有以 root 身份登录。 (对于 hbase)。并且从终端完美地工作。从php服务器不是! :( 服务器与 hmaster 在同一台机器上,并使用与 hadoop 用户相同的用户名登录! 我敢肯定,问题是,当您从 php 运行命令时,您以另一个用户身份运行它,并且该用户在 hadoop tmp 目录上没有定义的写入+执行权限。这就是 Exeption at java.io.File.createTempFile(File.java:1879) 发生的原因 一些奇怪/有趣的东西。在〜dir(hduser)中复制了jar,并且在php错误中我找不到/root/a.jar文件...

以上是关于从 PHP 服务器执行 hadoop jar 失败。没有权限的主要内容,如果未能解决你的问题,请参考以下文章

失败:执行错误,从 org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask​​ 返回代码 1

Hive 错误:失败:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。字符串类型信息

将可执行 jar 发送到 hadoop 集群并作为“hadoop jar”运行

hadoop运行 jar包的时候,怎么设置

布署hadoop的时候,为啥我在执行 ./hadoop jar ../hadoop-examples-0.20.203.0.jar wordcount,就不动了呢

如何通过php在Xampp中执行jar文件