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>


2.shell代码(hadoop.sh)

#!/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执行shell

php给我们提供了system(),exec(),passthru()这三个函数来调用外部的命令.
虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码

例子:system("/usr/local/bin/webalizer/webalizer");
 

php + perl +hadoop的问题

查看一下/usr/local/jdk1.7.0_17/bin/java权限,若真的没有你所用用户的执行权限,则在terminal中执行

chomod 777 /usr/local/jdk1.7.0_17/bin/java

但也有可能是hadoop不支持jdk1.7的问题,换1.6试一下
 

相关内容

    暂无相关文章