實驗版本
- 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
準備
- 源數據
文件名稱: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>
數據不是很多,主要是為了試驗
- 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>
- 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
查看執行結果
<code>hdfs dfs -cat /user/root/output_1/*
/<code>
閱讀更多 有我在心 的文章
關鍵字: HDFS Subversion Line