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


分享到:


相關文章: