php 操作 Hadoop

实验版本

  • Hadoop
<code>Hadoop 2.10.0
Subversion ssh://git.corp.linkedin.com:29418/hadoop/hadoop.git -r e2f1f118e465e787d8567dfa6e2f3b72a0eb9194
Compiled by jhung on 2019-10-22T19:10Z
Compiled with protoc 2.5.0
From source with checksum 7b2d8877c5ce8c9a2cca5c7e81aa4026
This command was run using /usr/local/hadoop-2.10.0/share/hadoop/common/hadoop-common-2.10.0.jar
/<code>
  • PHP
<code>PHP 7.4.3 (cli) (built: Feb 23 2020 07:24:28) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
/<code>

可能大家主观上认为 Hadoop 只能用于 Java 开发语言,实际上不是的 Hadoop 支持非常多的语言。主要用到一个工具:Hadoop Streaming。

大概意思就是:使用 hadoop jar hadoop-streaming-2.10.0.jar 发布一个任务并执行

注意:最新版的 Hadoop 使用这个命令:mapred streaming

准备

  1. 源数据

文件名称:user.txt

<code>1,阿大,40,shanghai,110,
2,阿二,41,shanghai,110,

3,阿三,42,shanghai,110,
4,阿四,43,shanghai,110,
5,阿五,43,shenzheng,110,
6,阿六,44,shenzheng,110,
7,阿七,44,nanjing,110,
8,阿八,45,nanjing,110,
9,阿九,45,nanjing,110,
10,阿十,45,beijing,110,/<code>

数据不是很多,主要是为了试验


  1. mapper 程序

文件名称:mapper.php

<code>#!/usr/bin/php
$count = 0;
while ($line = fgets(STDIN)) {
$line = trim($line);
$user = explode(',', $line);

echo $user[3] . " 1\\n";
}
/<code>
  1. reducer 程序

文件名称:reducer.php

<code>#!/usr/bin/php
$result = array();

while ($line = fgets(STDIN)) {
list($city, $count) = explode(' ', $line);
if (!isset($result[$city])) {
$result[$city] = 0;
}

$result[$city] += $count;
}

foreach ($result as $key => $value) {
echo "$key $value\\n";
}
/<code>

上传数据源(user.txt)

<code># 如果HDFS系统已经存在,则跳过
hdfs dfs -mkdir /input

# 上传需要分析的数据源
hdfs dfs -put user.txt /input/user.txt
/<code>

执行 PHP 程序

<code>hadoop jar /usr/local/hadoop-2.10.0/share/hadoop/tools/lib/hadoop-streaming-2.10.0.jar -mapper /root/demo/mapper.php -reducer /root/demo/reducer.php -input /input/user.txt -output output_1
/<code>

参数说明

  • input 提供数据源
  • output 输出执行结果

注意:input 参数,如果填写相对路劲,则需要在 HDFS 系统预先创建对应的目录。/user/root/input/user.txt

php 操作 Hadoop

查看执行结果

<code>hdfs dfs -cat /user/root/output_1/*
/<code>
php 操作 Hadoop

php 操作 Hadoop


分享到:


相關文章: