【每天五分钟大数据-第一期】 伪分布式+Hadoopstreaming (3)

image-20211206174018047

可以在 HDFS 的 web 界面进行查看。

image-20211207140722752

使用自带的例子进行 WordCount 案例演示

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.1.jar wordcount /input /out

image-20211207141832790

可以看到本地集群的 1 号任务。

【每天五分钟大数据-第一期】 伪分布式+Hadoopstreaming

最后,查看计算结果

[root@iZ2zebkqy02hia7o7gj8paZ hadoop-2.6.1]# hadoop dfs -ls /out DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. Found 2 items -rw-r--r-- 1 root supergroup 0 2021-12-06 18:28 /out/_SUCCESS -rw-r--r-- 1 root supergroup 48 2021-12-06 18:28 /out/part-r-00000 [root@iZ2zebkqy02hia7o7gj8paZ hadoop-2.6.1]# hadoop dfs -text /out/part-r-00000 DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. flink 4 hadoop 6 hbase 4 hive 2 kafka 2 spark 8

同样也可以在 web 页面进行查看。

【每天五分钟大数据-第一期】 伪分布式+Hadoopstreaming

ok!至此,在伪分布式环境计算了第一个 MapReduce 任务。

系统案例感受完了,下面看看自己写一个 MapReduce 任务。

第一个 MR 程序

通常开发一个 MR(MapReduce)程序,是用 Java 来进行开发的,本身 hadoop 生态也是用 Java实现。

所以,使用 Java 开发 MR 是最好的选择。

但今天选取 Python 作为 MR 开发语言。

原因有二:其一、很多算法同学对于 Python 的友好是不言而喻的。其二、MR 程序本身担任的是离线任务,对实时性要求不高,但是对于开发效率的要求却不低,Python 开发的MR程序,开箱即用。但用 Java 的话,需要配置一些jar环境,然后打包,上传。。。

下面就用 Python 作为开发语言进行一个 WordCount 的实现。

官网这么说:

Hadoop streaming是Hadoop的一个工具, 它帮助用户创建和运行一类特殊的map/reduce作业, 这些特殊的map/reduce作业是由一些可执行文件或脚本文件充当mapper或者reducer。

例如:

$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper /bin/cat \ -reducer /bin/wc

是的,看文档,咱们需要一个输入文件地址,一个输出文件地址。

另外,需要一个 mapper 程序以及一个 reducer 程序。

下面就开始搞吧!

首先,咱们需要一个 mapper 程序来进行将文件从标准输入进行读取

编写 mapper.py:

#!/usr/bin/python import sys import re for line in sys.stdin: words = re.split(" +", line.strip()) for word in words: print("%s\t%s" % (word, "1"))

其中使用正则 re 是防止单词之间出现多个空格。

下面编写 reducer.py:

#!/usr/bin/python import sys sum = 0 last_word = None for line in sys.stdin: word = line.strip().split("\t") if len(word) != 2: continue word = word[0] if last_word is None: last_word = word if last_word != word: print('\t'.join([last_word, str(sum)])) last_word = word sum = 0 sum += 1 print('\t'.join([last_word, str(sum)]))

下面可以先进性一番测试,通过一个shell命令即可:

cat input_file | python mapper.py | sort -k1 | python reducer.py

最后,就可以编写文档中提供的 Hadoop streaming 工具了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdffw.html