设为首页 加入收藏

TOP

Hadoop札记:使用Python编写wordcount程序
2018-08-21 06:07:48 】 浏览:125
Tags:Hadoop 札记 使用 Python 编写 wordcount 程序

尝试着用3台虚拟机搭建了伪分布式系统,完整的搭建步骤等熟悉了整个分布式框架之后再写,今天写一下用python写wordcount程序(MapReduce任务)的具体步骤。


MapReduce任务以来HDFS存储和Yarn资源调度,所以执行MapReduce之前要先启动HDFS和Yarn。我们都知道MapReduce分Map阶段和Reduce阶段,这就需要我们 自己写Map阶段的处理方法和Reduce阶段的处理方法。


接下来就是用python写Map的处理逻辑和Reduce的处理逻辑。wordcount是词频统计,要处理的原文本文件要上传到HDFS上,流程是原文本以流式方式传到Map函数,Map函数处理之后把结果传到Reduce函数,整个处理完后结果会保存在HDFS上,流式处理可以理解成文本一行一行的在原文件、Map函数、Reduce函数、结果文件之间流动处理。


原文本:


hello world
hello hadoop hadoop
nihao world
hello mapreduce


Map方法代码:


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


Reduce方法代码:


#!/usr/bin/python
import sys
 
current_count = 0
current_word = None
 
for line in sys.stdin:
    line = line.strip()
    word, count = line.split('\t', 1)
    count = int(count)
    if current_word == word:
        current_count += count
    else:
        if current_word:
            print "%s\t%s" % (current_word, current_count)
 
        current_count = count
        current_word = word


代码的逻辑都很简单,从标准输入按行读取处理数据,每行处理完print打印。


先在shell上测试一下:


#cat word.txt | ./mapper.py | sort


hadoop  1
hadoop  1
hello  1
hello  1
hello  1
mapreduce  1
nihao  1
world  1
world  1


sort是行之间按单词首字母排序,在MapReduce上sort过程hadoop会处理。


如果没有sort,结果是这样的:


#cat word.txt | ./mapper.py 


hello  1
world  1
hello  1
hadoop  1
hadoop  1
nihao  1
world  1
hello  1
mapreduce  1


#cat word.txt | ./mapper.py | sort |./reducer.py


hadoop  2
hello  3
mapreduce  1
nihao  1


测试完没问题后就可以用MapReduce来执行了。


输入命令:


hadoop jar hadoop-streaming-2.7.4.jar \


-input /wordcount/word.txt \


-output /wordcount/out \


-mapper /home/hadoop/apps/hadoop-2.7.4/file/wordcount_python/mapper.py \


-reducer /home/hadoop/apps/hadoop-2.7.4/file/wordcount_python/reducer.py


命令解释:


第一行是指明用到的streaming包的位置,第二行指明原文件在HDFS上的路径,第三行是输出结果在HDFS上的路径,输出路径原来不能存在,已存在的话会报错,第四行和第五行指明Map方法和Reduce方法程序路径。


mapper.py和reduce.py需要加上执行权限,chmod +x mapper.py,它们两个py文件不用放在HDFS上,放在本地即可。


执行后就会开启MapReduce任务,配置没问题的话就不会报错,执行完成后会在MapReduce上生成/wordcount/out目录里面有两个文件:



第二个是结果文件,第一个文件可以看到所占空间为0,cat一下什么也没有,只是一个处理成功的标识。


以上就是Python写wordcount的具体步骤,如有错误 欢迎指正!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python数据结构之冒泡排序和选择.. 下一篇C++函数的一些特性

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目