实验版本
- 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