一、准备好相关环境
参考《Nginx 1.4.3.6 + PHP 5.4.22(FastCGI)在CentOS 6.4下的编译安装》来搭建Linux下的PHP开发环境。
参考《CentOS Linux下Hadoop2.2.0集群的搭建》来搭建Hadoop集群。
二、在hadoop1上编写mapper程序和recuder程序
mapper程序
su - hadoop vi mapper.php
代码如下:
<?php $in = fopen("php://stdin", "r"); $results = array(); while ( $line = fgets($in, 4096) ){ $words = preg_split('/\W/', $line, 0, PREG_SPLIT_NO_EMPTY); foreach ($words as $word) $results[] = $word; } fclose($in); foreach ($results as $key => $value){ print "$value\t1\n"; } ?>
recuder程序
vi reducer.php
代码如下:
<?php $in = fopen("php://stdin", "r"); $results = array(); while ( $line = fgets($in, 4096) ){ list($key, $value) = preg_split("/\t/", trim($line), 2); $results[$key] += $value; } fclose($in); ksort($results); foreach ($results as $key => $value){ print "$key\t$value\n"; } ?>
同步mapper.php和reducer.php到其他节点。注意,所有节点php文件存放的目录必须保持一致。
scp *.php hadoop@hadoop2:/home/hadoop/
三、执行程序,注意必须使用绝对路径。
在/home/hadoop/下建test.txt文件,输入一下文字
asf asfadfsaf asd asf asf
hadoop fs -copyFromLocal /home/hadoop/test.txt /input hadoop jar /usr/local/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -mapper '/usr/local/webserver/php/bin/php /home/hadoop/mapper.php' -reducer '/usr/local/webserver/php/bin/php /home/hadoop/reducer.php' -input /input/test.txt -output /out5
如果执行没报错,执行之后可以看到执行结果。
hadoop fs -cat /out6/part-00000
结果如下:
asd 1 asf 3 asfadfsaf 1
除非注明,本博客文章均为原创,转载请以链接形式标明本文地址
本文地址: http://blog.cnwyhx.com/php-hadoop-mapreduce