用Mapreduce实现单词个数统计

首先有三个文件 red_new.py map_new.py run.sh
代码如下
map_new.py

import sys


for line in sys.stdin: // //系统模块
        ss = line.strip().split(' ') ////我们读的每一句话都按空格分开,strip()避免输入的 字符串有回车,制表符等隐含字符
        for word in ss:
                print '\t'.join([word.strip(), '1'])//这个单词就是key,当这个单词被我观察到一次,就加一个1

red_new.py

import sys
cur_word = None
sum = 0

for line in sys.stdin:  //标准输入
        ss = line.strip().split('\t')  // 按照输出重新变成一个数字
        if len(ss) != 2:  //把ss当作一个数组进行遍历,if判断这个数组是不是有两列,这两列分别存储 word和count,避免一些脏数据
                continue
        word, cnt = ss

        if cur_word == None:
                cur_word = word

        if cur_word != word:
                print '\t'.join([cur_word, str(sum)])
                cur_word = word
                sum = 0

        sum += int(cnt)

print '\t'.join([cur_word, str(sum)])

run.sh

HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"

#INPUT_FILE_PATH_1="/The_Man_of_Property.txt"
INPUT_FILE_PATH_1="/1.data"
OUTPUT_PATH="/output"

$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH

# Step 1.
$HADOOP_CMD jar $STREAM_JAR_PATH \
    -input $INPUT_FILE_PATH_1 \
    -output $OUTPUT_PATH \
    -mapper "python map_new.py" \
    -reducer "python red_new.py" \
    -file ./map_new.py \
    -file ./red_new.py
~                                  

mapreduce的核心思想是分而治之,先用map函数对数据进行拆分成一个个单词,然后用reduce对这些单个的单词进行汇总。
先用 python的方式来检查一下
安装好hadoop之后,用集群的方式搭建,启动 hadoop ,进入到hadoop安装目录
如果是第一次启动需要进行格式化./hadoop namenode -format (就像你买的电脑磁盘也需要进行格式化成fat32格式才能用,格式化主要是针对HDFS)

命令: ./bin/start-all.sh
命令 :jps 查看主节点和从节点的状态

主节点看到job tracker
1779 JobTracker
1940 Jps
1699 SecondaryNameNode
1556 NameNode
从节点上看到tasktracke
1018 -- process information unavailable
1446 Jps
1263 DataNode
1334 TaskTracke

1.png

首先提交文件
命令:/usr/local/src/hadoop-1.2.1/bin/hadoop fs -put ./map_new.py /
共3个文件 red_new.py map_new.py 文章
用hadoop方式
访问:http://192.168.95.128:50030/jobdetails.jsp?jobid=job_201801071700_0003
/usr/local/src/hadoop-1.2.1/bin/hadoop fs -text /output/part-00000
2.png

删除文件
/usr/local/src/hadoop-1.2.1/bin/hadoop fs -rmr /The_Man_of_Property.txt

你可能感兴趣的:(用Mapreduce实现单词个数统计)