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

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

MapReduce也支持除Java之外的其他语言,但要依赖流处理包(hadoop-streaming-2.7.4.jar),处理包不需要自己下载,hadoop本身带的就有,hadoop2.7的在hadoop-2.7.4/share/hadoop/tools/lib目录下,知道它所在的目录是因为只执行MapReduce命令的时候要指定hadoop-streaming-2.7.4.jar的位置。

接下来就是用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
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的具体步骤,如有错误 欢迎指正!

hadoop学习笔记——用python写wordcount程序的更多相关文章

  1. Hadoop学习笔记(1):WordCount程序的实现与总结

    开篇语: 这几天开始学习Hadoop,花费了整整一天终于把伪分布式给搭好了,激动之情无法言表······ 搭好环境之后,按着书本的代码,实现了这个被誉为Hadoop中的HelloWorld的程序--W ...

  2. 20180821 Python学习笔记:如何获取当前程序路径

    20180821 Python学习笔记:如何获取当前程序路径 启动的脚本的路径为:D:\WORK\gitbase\ShenzhenHouseInfoCrawler\main.py 当前脚本的路径为:D ...

  3. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  4. Hadoop学习笔记(2)

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  5. Hadoop学习笔记(5) ——编写HelloWorld(2)

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  6. Hadoop学习笔记(2) ——解读Hello World

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  7. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  8. Hadoop学习笔记(1)(转)

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  9. Hadoop学习笔记(4) ——搭建开发环境及编写Hello World

    Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...

随机推荐

  1. CentOS: 将虚拟机迁移到 Azure (以阿里云为例)

    Azure 虚拟机能很容易地导出 vhd 并迁移到各种环境中,包含本地及云端环境,或者迁移至其他区域.这为开发.测试.扩展带来了极大的便利.因此本文以阿里云为例,阐述的是如何将 CentOS 6.8 ...

  2. Oracle案例02——ORA-12034: "SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新

    最近同事在交接工作时,发现有几个schedule job没有执行成功,我这边给看了下,其中一个是由于数据库迁移,调用dblink的host主机IP在tnsnames中没有变更导致,还有一个是无法视图的 ...

  3. 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程

    详解游戏辅助编程 [目录] 1-什么是Windows API 2-Windows进程 3-Windows 的内存的运行原理 4-windows 中句柄的概念 5-Windows的变量类型 6-辅助实现 ...

  4. 《C++ Primer Plus》读书笔记之——处理数据

    本文旨在记录在阅读<C++ Primer Plus>第五版的过程中,一些重点的知识点,方便以后查阅.本文将不断更新...... 一.第三章 处理数据 1.无符号整型不能存储负数值,其优点是 ...

  5. Azkaban3.X的安装(2018年8月19日最新版本)

    参考文章: 1.http://azkaban.github.io/azkaban/docs/latest/ 2.http://blog.csdn.net/gaoqida/article/details ...

  6. June 24th 2017 Week 25th Saturday

    Who is able to be egotistical needs to be strong too. 有本事任性的人,也要有本事坚强. What is egotistical? Is it th ...

  7. January 19 2017 Week 3 Thursday

    What a man needs most is appreciated. 人性最深切的需求就是渴望别人的赞赏. Being appreciated by others is very importa ...

  8. IE和Firefox浏览器CSS兼容性技巧整理

    转自:http://homepage.yesky.com/185/11484185all.shtml#p11484185 CSS兼容常用技巧(1) 更多精彩相关文章推荐: 各大浏览器 CSS3 和 H ...

  9. zt C++ list 类学习笔记

    C++ list 类学习笔记 分类: C++ 2011-09-29 00:12 7819人阅读 评论(0) 收藏 举报 listc++iteratorvectorcconstructor 双向循环链表 ...

  10. TFS--解决新创建的windows用户无法访问TFS的问题

    今天入职新同事,帮忙配置TFS的账号碰到一个问题,TFS账号是映射取administrators组得 所以新建用户之后,无法马上引入TFS.查询原因是 Builtin组中没有该账号,以前也总是碰到新加 ...