通过我的PHP网页运行用Java编写的MapReduce作业

时间:2014-07-23 04:02:43

标签: java php hadoop mapreduce hdfs

我的PHP服务器托管在Job Tracker机器上,我试图通过调用执行jar命令的命令行来运行我的网页中的map reduce作业,

但我没有得到回应,工作没有开始。

但是如果我运行一个命令来使用相同的方法列出hdfs它运行正常。请指导我。

以下命令没有响应任何内容并且作业未运行:

exec("HADOOP_DIR/bin/hadoop jar /usr/local/MapReduce.jar Mapreduce [input Path] [output Path]");

但如果我这样做:

exec("HADOOP_DIR/bin/hadoop dfs -ls /user/hadoop");

运行正常。

1 个答案:

答案 0 :(得分:0)

我通过将php服务器用户更改为hduser(有权在hdfs中写入文件的用户)解决了这个问题。在不更改此用户的情况下,只有从hdfs读取的命令正在工作,而不是需要创建文件或在hdfs上写入的命令。

当我尝试通过我的php脚本运行在hdfs中创建目录的命令时,我的php服务器日志中出现了以下错误(/var/log/apache2/error.log):

mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=www-data, access=WRITE, inode="hduser":hduser:supergroup:rwxr-xr-x

在运行Jar命令以触发MapRed程序时,我收到以下错误:

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)

然后我做的是将/etc/apache2/apache2.conf中的用户更改为我的hadoop用户,然后重新启动我的服务器,现在每件事情都运行正常。

我应该参考Execute hadoop jar from PHP Server fails. Permission denied帖子,这有助于我解决这个问题。我希望这篇文章能帮助其他人。