php通过shell调用Hadoop的方法,phpshell调用hadoop
php通过shell调用Hadoop的方法,phpshell调用hadoop
1.php代码(index.php)
<!DOCTYPE html> <html> <!-- <style> body{background-color:red} </style> --> <!-- <style type="text/css"> --> <!-- body { background:url(渐变绿.jpeg); --> <!-- width:100%; --> <!-- height:100%; } </style> --> <body> <?php header('Content-type: text/html; charset=UTF8'); #phpinfo(); $jiaoben = $_GET['jiaoben']; echo "执行Hadoop的log信息:"; $ret= system("sh /home/work/$jiaoben", $status); if($status != 0) { echo ' failed, status=' . "$status\n"; } else { echo $ret; echo "<br><br>"; } ?> </body> </html>
#!/bin/bash echo "wordCount test start" rm -rf ~/file_20141024 mkdir ~/file_20141024 cd ~/file_20141024 echo "Hello World" > file1.txt echo "Hello China Beijing" > file2.txt cd /home/work/hadoop/bin ./hadoop dfs -rmr input_20141024 ./hadoop dfs -rmr output_20141024 ./hadoop fs -mkdir input_20141024 #hadoop fs -chomod -R 777 /input_20141024 ./hadoop fs -put ~/file_20141024/file*.txt input_20141024 ./hadoop jar /home/work/hadoop/hadoop-examples-1.1.2.jar wordcount input_20141024 output_20141024 ./hadoop fs -ls output_20141024 ./hadoop fs -cat output_20141024/part-r-00000 echo "wordCount test end"
3. 访问http://ip:8888/index.php?jiaoben=hadoop.sh
查询结果:
/user/work/output_20141024/part-r-00000 Beijing 1 China 1 Hello 2 World 1
php给我们提供了system(),exec(),passthru()这三个函数来调用外部的命令.
虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码
例子:system("/usr/local/bin/webalizer/webalizer");
查看一下/usr/local/jdk1.7.0_17/bin/java权限,若真的没有你所用用户的执行权限,则在terminal中执行
chomod 777 /usr/local/jdk1.7.0_17/bin/java
但也有可能是hadoop不支持jdk1.7的问题,换1.6试一下
评论暂时关闭