用PHP编写Hadoop的MapReduce程序_hguisu的博客-CSDN博客_mapreduce php


本站和网页 https://blog.csdn.net/hguisu/article/details/7263746 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

用PHP编写Hadoop的MapReduce程序_hguisu的博客-CSDN博客_mapreduce php
用PHP编写Hadoop的MapReduce程序
hguisu
于 2012-02-16 11:20:37 发布
17680
收藏
分类专栏:
云计算hadoop
文章标签:
hadoop
mapreduce
php
whitespace
input
output
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hguisu/article/details/7263746
版权
云计算hadoop
专栏收录该内容
22 篇文章
3 订阅
订阅专栏
Hadoop流
虽然Hadoop是用java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编写map函数和reduce函数. Hadoop流动关键是,它使用UNIX标准流作为程序与Hadoop之间的接口。因此,任何程序只要可以从标准输入流中读取数据,并且可以把数据写入标准输出流中,那么就可以通过Hadoop流使用任何语言编写MapReduce程序的map函数和reduce函数。 例如:bin/hadoop jar contrib/streaming/hadoop-streaming-0.20.203.0.jar -mapper /usr/local/hadoop/mapper.php -reducer /usr/local/hadoop/reducer.php -input test/* -output out4 Hadoop流引入的包:hadoop-streaming-0.20.203.0.jar,Hadoop根目录下是没有hadoop-streaming.jar的,因为streaming是一个contrib,所以要去contrib下面找,以hadoop-0.20.2为例,它在这里: -input:指明输入hdfs文件的路径 -output:指明输出hdfs文件的路径 -mapper:指明map函数 -reducer:指明reduce函数
mapper函数
mapper.php文件,写入如下代码:
#!/usr/local/php/bin/php
<?php
$word2count = array();
// input comes from STDIN (standard input)
// You can this code :$stdin = fopen(“php://stdin”, “r”);
while (($line = fgets(STDIN)) !== false) {
    // remove leading and trailing whitespace and lowercase
    $line = strtolower(trim($line));
    // split the line into words while removing any empty string
    $words = preg_split('/\W/', $line, 0, PREG_SPLIT_NO_EMPTY);
    // increase counters
    foreach ($words as $word) {
        $word2count[$word] += 1;
    }
// write the results to STDOUT (standard output)
// what we output here will be the input for the
// Reduce step, i.e. the input for reducer.py
foreach ($word2count as $word => $count) {
    // tab-delimited
    echo $word, chr(9), $count, PHP_EOL;
?>
这段代码的大致意思是:把输入的每行文本中的单词找出来,并以”
             hello    1
             world  1″
这样的形式输出出来。
和之前写的PHP基本没有什么不同,对吧,可能稍微让你感到陌生有两个地方:
PHP作为可执行程序
第一行的
#!/usr/local/php/bin/php告诉linux,要用#!/usr/local/php/bin/php这个程序作为以下代码的解释器。写过linux shell的人应该很熟悉这种写法了,每个shell脚本的第一行都是这样: #!/bin/bash, #!/usr/bin/python
有了这一行,保存好这个文件以后,就可以像这样直接把mapper.php当作cat, grep一样的命令执行了:./mapper.php
使用stdin接收输入
PHP支持多种参数传入的方法,大家最熟悉的应该是从$_GET, $_POST超全局变量里面取通过Web传递的参数,次之是从$_SERVER['argv']里取通过命令行传入的参数,这里,采用的是标准输入stdin
它的使用效果是:
在linux控制台输入 ./mapper.php
mapper.php运行,控制台进入等候用户键盘输入状态
用户通过键盘输入文本
用户按下Ctrl + D终止输入,mapper.php开始执行真正的业务逻辑,并将执行结果输出
那么stdout在哪呢?print本身已经就是stdout啦,跟我们以前写web程序和CLI脚本没有任何不同。
reducer函数
创建reducer.php文件,写入如下代码:
#!/usr/local/php/bin/php
<?php
$word2count = array();
// input comes from STDIN
while (($line = fgets(STDIN)) !== false) {
    // remove leading and trailing whitespace
    $line = trim($line);
    // parse the input we got from mapper.php
    list($word, $count) = explode(chr(9), $line);
    // convert count (currently a string) to int
    $count = intval($count);
    // sum counts
    if ($count > 0) $word2count[$word] += $count;
// sort the words lexigraphically
//
// this set is NOT required, we just do it so that our
// final output will look more like the official Hadoop
// word count examples
ksort($word2count);
// write the results to STDOUT (standard output)
foreach ($word2count as $word => $count) {
    echo $word, chr(9), $count, PHP_EOL;
?>
这段代码的大意是统计每个单词出现了多少次数,并以”
hello   2
world  1″
这样的形式输出
用Hadoop来运行
把文件放入 Hadoop 的 DFS 中:
bin/hadoop dfs -put test.log test 执行 php 程序处理这些文本(
以Streaming方式执行PHP mapreduce程序:):
bin/hadoop jar contrib/streaming/hadoop-streaming-0.20.203.0.jar -mapper /usr/local/hadoop/mapper.php -reducer /usr/local/hadoop/reducer.php -input test/* -output out
注意:
1) input和output目录是在hdfs上的路径
2) mapper和reducer是在本地机器的路径,一定要写绝对路径,不要写相对路径,以免到时候hadoop报错说找不到mapreduce程序
3 ) mapper.php 和 reducer.php 必须复制到所有 DataNode 服务器上的相同路径下, 所有的服务器都已经安装php.且安装路径一样.
查看结果
bin/hadoop d fs -cat /tmp/out/part-00000
hguisu
关注
关注
点赞
收藏
打赏
评论
用PHP编写Hadoop的MapReduce程序
Hadoop流虽然Hadoop是用java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编写map函数和reduce函数.Hadoop流动关键是,它使用UNIX标准流作为程序与Hadoop之间的接口。因此,任何程序只要可以从标准输入流中读取数据,并且可以把数据写入标准输出流中,那么就可以通过Hadoop流使用任何语言编写MapRed
复制链接
扫一扫
专栏目录
Php-Hadoop-Hdfs:通过 CLI 和 WebHDFS 用于 HDFS 的 PHP 客户端
06-01
PHP-Hadoop-HDFS
用于 WebHDFS 和 CLI hadoop fs纯 PHP 统一包装器。 为两者提供单一界面,因此您可以根据您的任务决定使用哪一个。
需要 PHP 5.3+
文档:
每个方法都有详细的文档块,所以使用 phpDocumentor 应该足以开始。
应用程序接口:
有关每种方法抛出的异常,请参阅文档块 *
实例化 CLI 实现:
$ hdfs = new \ Hdfs \ Cli ();
实例化 WebHDFS 实现:
$ hdfs = new \ Hdfs \ Web ();
$ hdfs -> configure ( $ host , $ port , $ user );
更改本地文件系统的包装器。 如果您需要 hdfs 与另一个远程服务而不是本地 FS 交互,请使用它
$ hdfs -> setFilesystemWrapper
php 使用hadoop,PHP来操作Hadoop
weixin_35755640的博客
03-09
665
还是按上次安装的Hadoopcd /home/hadoopmkdir testvi user.txt:1,张三,23,beijing,10086,2,李四,34,shanghai,10000,3,王五,20,beijing,10010,vi mapper.php:#!/usr/bin/php$count = 0;while($line = fgets(STDIN)) {$line = trim($...
参与评论
您还未登录,请先
登录
后发表或查看评论
MapReduce实现单词分类
01-24
MapReduce实现单词分类,可直接运行。MapReduce实现单词分类,可直接运行。
php 使用hadoop,php能用hadoop吗
weixin_42516581的博客
03-09
113
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。虽然Hadoop是用java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API,,允许用户使用任何语言编写map函数和reduce函数。 (推荐学习:PHP视频教程)Hadoop流动关键是,它使用UNIX标准流作为程...
PHP+Hadoop项目
最新发布
web15085181368的博客
04-07
609
1.应用场景
学习使用PHP+Hadoop已经相关技术进行[分布式]开发.
2.学习/操作
1.PHP+Hadoop实现数据统计分析
https://blog.csdn.net/hao508506/article/details/63002073
后续补充

3.问题
TBD
4.参考
https://blog.csdn.net/hao508506/article/details/63002073
后续补充

...
php写hadoop,Hadoop --Streaming--PHP
weixin_42522045的博客
03-20
56
Hadoop 支持各种语言的模型.之前的实例中都是用 JAVA 写的:http://blog.sina.com.cn/s/blog_5f54f0be0101f6sj.html,然后打包成JAR, 再用 hadoop jar 来执行。我们还可以用其它语言写,然后通过 Streaming加载进去。Hadoop Streaming 使用 Unix 中的流与程序进行交互。如:[root@localhost...
PHP程序能不能运行在Hadoop?CentOS Linux 8下PHP的大数据处理
Tristone的博客
12-29
251
# 答案
通过Hadoop的MapReduce功能是可以正常运行PHP程序的。
需要通过以下步骤:
# 1、安装Hadoop
在集群的每台机器上安装Hadoop,保证目录结构和配置文件一致(可以在一台服务器上安装好复制到另外的服务器上),参考:怎么在CentOS Linux 8 上安装Hadoop?
2、安装PHP
在集群的每台机器上安装PHP,并保持目录结构和配置文件一致,参考:怎么在CentOS Linux 8 上安装PHP?
本文假定你已经做好了上述安装,如果没有做好,可以点击上述链接查看相关参考资料
php 实现mapreduce,php写mapreduce程序示例
weixin_39853892的博客
03-21
88
用PHP写hadoop的mapreduce程序Hadoop本身是Java写的,所以,给hadoop写mapreduce,人们会自然地想到java但hadoop里面有个contrib叫做hadoop streaming,这是一个小工具,为hadoop提供streaming支持,使得任何支持标准IO (stdin, stdout)的可执行程序都能成为hadoop的mapper 或者 reducer例如...
php hadoop 库,hadoop 本地库 说明
weixin_39759989的博客
03-22
45
问题导读1.hadoop本地库支持哪些平台?2.本地库是否有32,64之分?3.hadoop通过什么工具来检测本地库是否加载正确?4.如何加载本地库?包含哪些步骤?5.本地库在什么情况下不需要使用DistibutedCache?概述这个指南描述了hadoop本地库,包括关于共享本地库的小讨论。注意:取决于你的环境,这个词 “native libraries”涉及所有的*.so’,你需要编译;这个词...
PHP+Hadoop实现数据统计分析
weixin_33878457的博客
11-23
545
记一次完全独立完成的统计分析系统的搭建过程,主要用到了PHP+Hadoop+Hive+Thrift+Mysql实现
安装
Hadoop安装: http://www.powerxing.com/install-hadoop/Hadoop集群配置: http://www.powerxing.com/install-hadoop-cluster/Hive安装: https://chu88...
php 使用hadoop,用PHP编写Hadoop的MapReduce程序
weixin_31964135的博客
03-09
82
Hadoop流虽然Hadoop是用java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编写map函数和reduce函数.Hadoop流动关键是,它使用UNIX标准流作为程序与Hadoop之间的接口。因此,任何程序只要可以从标准输入流中读取数据,并且可以把数据写入标准输出流中,那么就可以通过Hadoop流使用任何语言编写MapReduce程序的ma...
hadoop类似php,Hadoop之php脚本调用
weixin_36116366的博客
04-05
40
Hadoop之php脚本调用 原则上,Hadoop是可以支持几乎任何语言的。 原文链接:http://rdc.taobao.com/team/top/tag/hadoop-php-stdin/ 用PHP写hadoop的mapreduce程序 Posted by 覃 健祥 on 03月 28th, 2011 Hadoop本身是Java写的,所以,给hadoop写mapreduce,人...
MongoDB的MapReduce用法及php示例代码
ABC123
05-10
2989
MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法:
* Mongodb三种分组方式:
* 1、group(先筛选再分组,不支持分片,对数据量有所限制,效率不高)
* 2、mapreduce(基于js引擎,单线程执行,效率较低,适合用做后台统计等)
* 3、agg
PHP来操作Hadoop
junqing124的专栏
02-18
5229
还是按上次安装的Hadoop
cd /home/hadoop
mkdir test
vi user.txt:
1,张三,23,beijing,10086,
2,李四,34,shanghai,10000,
3,王五,20,beijing,10010,
vi mapper.php:
#!/usr/bin/php
$count = 0;
while($line = fgets(S
php写mapreduce程序示例
nuoline的专栏
02-25
3902
用PHP写hadoop的mapreduce程序
Hadoop本身是Java写的,所以,给hadoop写mapreduce,人们会自然地想到java
但hadoop里面有个contrib叫做hadoop
streaming,这是一个小工具,为hadoop提供streaming支持,使得任何支持标准IO (stdin,
stdout)的可执行程序都能成为hadoop的mapper 或者 reducer
【学习点滴-hadoop】Hadoop之php脚本调用
专注、专心
05-25
1万+
原则上,Hadoop是可以支持几乎任何语言的。
原文链接:http://rdc.taobao.com/team/top/tag/hadoop-php-stdin/
用PHP写hadoop的mapreduce程序
Posted by 覃 健祥 on 03月 28th, 2011
Hadoop本身是Java写的,所以,给hadoop写mapreduce,人们会自然地想到java
用php模拟MapReduce
patriot_28的博客
07-09
66
实现代码:
<?php
namespace App\Services\Knowledge;
class MapReduce
public function map($arr)
return array_map(function($item){
$words=explode(' ', $item);
$map_arr=[];
foreach ($words as $value) {
if(isset($map_arr[$value])){
$map
MapReduce
隔壁阿源的博客
09-27
6754
MapReduce模型
MapReduce采用“分而治之”策略,一个大规模数据集进行分片,多个Map任务并行处理。实现“计算向数据靠拢”理念,而不比大量移动数据造成网络开销。
MapReduce采用Master/Slave架构,一个Master,若干Slave。Master运行JobTracker负责作业调度,Slave运行TaskTracker负责具体作业处理。
JobTracker
负责任务...
MapReduce详解
热门推荐
q739404976的博客
06-13
1万+
MapReduce模型简介:
•MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和Reduce
•编程容易,不需要掌握分布式并行编程细节,也可以很容易把自己的程序运行在分布式系统上,完成海量数据的计算
•MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:游动-白
设计师:我叫白小胖
返回首页
hguisu
CSDN认证博客专家
CSDN认证企业博客
码龄15年
架构领域优质创作者
331
原创
2890
周排名
248
总排名
1057万+
访问
等级
4万+
积分
1万+
粉丝
6303
获赞
2198
评论
1万+
收藏
私信
关注
热门文章
八大排序算法
1030273
java(3)-深入理解java异常处理机制
373298
Linux的SOCKET编程详解
306408
设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
284056
Hadoop Hive sql语法详解
265875
分类专栏
架构设计
付费
22篇
趣说设计模式
付费
26篇
框架设计
4篇
思考.思维
2篇
JAVA底层
5篇
Java并发编程
8篇
认知学习
4篇
服务治理
1篇
操作系统
8篇
Linux
28篇
MySQL
14篇
docker
15篇
k8s
15篇
专栏总结
23篇
SpringBoot
9篇
spring学习笔记
12篇
Java
34篇
知识体系
3篇
PHP
38篇
PHP内核
10篇
程序人生
10篇
数据结构与算法
27篇
云计算hadoop
22篇
网络知识
11篇
c/c++
21篇
memcache
5篇
计算机原理
4篇
socket网络
8篇
AOP
2篇
代码重构
11篇
搜索引擎Search Engine
14篇
大数据处理
10篇
webserver
3篇
Redis
18篇
最新评论
八大排序算法
weixin_54836692:
错误更改了吗?
八大排序算法
graphicswe:
没想到错误百出的排序,居然有这么多人在看,博主的代码好像没有在机器上跑过啊
八大排序算法
算法永无止境:
xier排序要考虑j边界小于0的情况呀,有问题的
思考思维(1):思考和深度思考总结
hguisu:
把看过相关的书和一些网络内容进行思考然后
总结。
java(4)-深入理解java嵌套类、内部类以及内部类builder构建构造函数
吴小破:
直接赋值楼主Builder方式的demo,结果有编译错误。
内部类Builder中每个给单个字段赋值的方法都报错“cannot assign a value to final variable”,能解答下吗?
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
架构师技能8:springboot全局handler处理http 404错误引发登录失效的问题
思考思维(2):《极简思考》结构化思维
思考思维(1):思考和深度思考总结
2022年10篇
2021年9篇
2020年54篇
2019年18篇
2018年18篇
2017年5篇
2016年5篇
2015年10篇
2014年8篇
2013年20篇
2012年151篇
2011年15篇
2010年6篇
2007年2篇
目录
目录
分类专栏
架构设计
付费
22篇
趣说设计模式
付费
26篇
框架设计
4篇
思考.思维
2篇
JAVA底层
5篇
Java并发编程
8篇
认知学习
4篇
服务治理
1篇
操作系统
8篇
Linux
28篇
MySQL
14篇
docker
15篇
k8s
15篇
专栏总结
23篇
SpringBoot
9篇
spring学习笔记
12篇
Java
34篇
知识体系
3篇
PHP
38篇
PHP内核
10篇
程序人生
10篇
数据结构与算法
27篇
云计算hadoop
22篇
网络知识
11篇
c/c++
21篇
memcache
5篇
计算机原理
4篇
socket网络
8篇
AOP
2篇
代码重构
11篇
搜索引擎Search Engine
14篇
大数据处理
10篇
webserver
3篇
Redis
18篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
hguisu
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值