我的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");
我通过将php服务器用户更改为hduser(具有在hdfs中写入文件的权限的用户)来解决此问题。如果不更改此用户,则只有从HDFS读取的命令有效,而不是需要在HDFS上创建文件或写入的命令。
当我试图运行命令创建目录在hdfs通过我的php脚本,我得到以下错误在我的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用户,然后重新启动我的服务器,现在一切都工作正常。
我应该参考执行hadoop jar从PHP服务器失败。Permission denied post帮助我解决了这个问题。我希望这篇文章也能帮助到其他人。