上周我们搭建好了hadoop环境,接下来我们进行一些MapReduce实践。

本次测试是对一篇英文文章进行单词计数,统计每一个单词出现的总次数并输出结果。
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行注:图片来源:八斗学院

思路如上图:

→input:文章

→将文章的每一行按照空格切分为列表.strip().split(’ ')

→读取列表元素(单词)

→对读取到的每一个单词进行标记word1 1

→排序相同的单词

→统计每一个单词的总数并输出word1 n

我们实践来看下:

1)input文章内容如下:

No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

文章只有三行。

2)map.py

import sys

for line in sys.stdin:#这里按标准输入文章

    ss = line.strip().split(' ')#将文章每一行内容按空格切分为列表,可print ss 看下具体结果

    for word in ss:#遍历列表,读取里面的元素

            print '\t'.join([word.strip(), '1'])

mapping测试:

cat test.txt | python map.py

输出结果:读取每一个单词并标记1
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

2)red.py

#!/usr/local/bin/python

import sys

current_word = None

sum = 0

for line in sys.stdin:#这里按照标准输入,输入的是map.py输出的结果

    word, val = line.strip().split('\t')#map输出的结果我们是按照\t进行分隔

    if current_word == None:

            current_word = word

    if current_word != word:

            print "%s\t%s" % (current_word, sum)

            current_word = word

            sum = 0

    sum += 1

print “%s\t%s” % (current_word, str(sum))

reducing本地测试1:

cat test.txt | python map.py | python red.py

输出结果:
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

从上图看,此结果并没有将相同的单词统计在一起,这是因为本地测试命令没有将map.py的输出结果进行排序合并!本地测试时需要手动排序,在集群上运行时,MapReduce框架会自动进行排序合并!这是需要注意的!

reducing本地测试2:

cat test.txt | python map.py | sort -k1 | python red.py

输出结果:我们看到相同的单词已经统计在一起了
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

至此,MapReduce本地测试就完成了,步骤就是这样,我们在写代码的时候,可以对每一个不熟悉的函数单独进行本地测试,看其输出结构究竟是什么,以了解其中的含义,加深理解。

3)接下来我们让这个测试在集群上运行一下看结果如何:

run.sh脚本如下:

HADOOP_CMD="/usr/local/src/hadoop-2.6.1/bin/hadoop"

STREAM_JAR_PATH="/usr/local/src/hadoop-2.6.1/share/hadoop/tools/lib/hadoop-streaming-2.6.1.jar"

INPUT_FILE_PATH_1="/test.txt"

OUTPUT_PATH="/output"

$HADOOP_CMD fs -rm -r -skipTrash $OUTPUT_PATH

#Step 1.

$HADOOP_CMD jar $STREAM_JAR_PATH \

    -input $INPUT_FILE_PATH_1 \

    -output $OUTPUT_PATH \

    -mapper "python map.py" \

    -reducer "python red.py" \

    -file ./map.py \

    -file ./red.py

运行脚本之前先上传test.txt文件到HDFS上

hadoop fs -put text.txt /

hadoop fs -ls /查看是否上传成功
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

运行脚本

bash run.sh

hadoop fs -ls /运行完后查看输出
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

hadoop fs -ls /output查看输出结果:
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

hadoop fs -text /output/part-00000
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

输出结果和我们本地测试结果一致!end!

下一文我们将介绍MapReduce在集群上分发文件的几种方式。

欢迎关注:【大数据学习笔记】个人公众号,一起交流学习!感谢指导!
No.4大数据入门 | MR实践:WordCount之本地测试与集群运行

相关文章:

  • 2021-12-05
  • 2021-10-09
  • 2021-11-25
  • 2021-12-20
  • 2021-11-14
  • 2022-12-23
  • 2022-01-06
  • 2022-01-10
猜你喜欢
  • 2021-12-24
  • 2021-07-07
  • 2021-09-27
  • 2022-12-23
  • 2021-06-18
  • 2021-10-27
  • 2022-12-23
相关资源
相似解决方案