关于hadoop,建议大家在自己的linux上面跟着网上的教程搭建一次单节点和多节点的hadoop平台,亦可参考Hadoop安装教程_单机/伪分布式配置。关于mapreduce,我是新手,只能从“分而治之”的角度来考虑,首先“map”也就是”分”——数据分割,然后“reduce”对"map"处理后的结果进一步的运算,这里给出的例子是一般的hadoop入门程序“WordCount”,就是首先写一个map程序用来将输入的字符串分割成单个的单词,然后reduce这些单个的单词,相同的单词就对其进行计数,不同的单词分别输出,结果输出每一个单词出现的频数。

注意:关于数据的输入输出是通过sys.stdin(系统标准输入)和sys.stdout(系统标准输出)来控制数据的读入与输出。所有的脚本执行之前都需要修改权限,否则没有执行权限,例如下面的脚本创建之前使用“chmod +x mapper.py”

mapper.py

#!/usr/bin/env python
# ($HADOOP_HOME/mapper.py)
import sysfor line in sys.stdin:  # 遍历读入数据的每一行line = line.strip()  # 将行尾行首的空格去除words = line.split()  #按空格将句子分割成单个单词for word in words:print '%s\t%s' %(word, 1)
复制代码

reducer.py

#!/usr/bin/env python
# ($HADOOP_HOME/reducer.py)
from operator import itemgetter
import syscurrent_word = None  # 为当前单词
current_count = 0  # 当前单词频数
word = Nonefor line in sys.stdin:words = line.strip()  # 去除字符串首尾的空白字符word, count = words.split('\t')  # 按照制表符分隔单词和数量try:count = int(count)  # 将字符串类型的‘1’转换为整型1except ValueError:continueif current_word == word:  # 如果当前的单词等于读入的单词current_count += count  # 单词频数加1else:if current_word:  # 如果当前的单词不为空则打印其单词和频数print '%s\t%s' %(current_word, current_count)  current_count = count  # 否则将读入的单词赋值给当前单词,且更新频数current_word = wordif current_word == word:print '%s\t%s' %(current_word, current_count)
复制代码

查看输出结果

  cd $HADOOP_HOMEecho "foo foo quux labs foo bar zoo zoo hying" | ./mapper.py | sort -k 1,1 | ./reducer.py# echo是将后面“foo ****”字符串输出,并利用管道符“|”将输出数据作为mapper.py这个脚本的输入数据,并将mapper.py的数据输入到reducer.py中,其中参数sort -k 1,1是将reducer的输出内容按照第一列的第一个字母的ASCII码值进行升序排序
复制代码

下面看一些脚本的输出结果:

让Python代码在hadoop上跑起来!

一、准备输入数据

  • 接下来,先下载三本书:

     mkdir -p tmp/gutenbergcd tmp/gutenbergwget http://www.gutenberg.org/ebooks/20417.txt.utf-8wget http://www.gutenberg.org/files/5000/5000-8.txtwget http://www.gutenberg.org/ebooks/4300.txt.utf-8
    复制代码
  • 然后把这三本书上传到hdfs文件系统上:

    hdfs dfs -mkdir ./input # 在hdfs上的该用户目录下创建一个输入文件的文件夹
    hdfs dfs -put ./tmp/gutenberg/*.txt ./input # 上传文档到hdfs上的输入文件夹中
    复制代码
  • 寻找你的streaming的jar文件存放地址,注意2.6的版本放到share目录下了,可以进入hadoop安装目录寻找该文件:

    cd $HADOOP_HOME
    find ./ -name "*streaming*"
    复制代码
  • 由于这个文件的路径比较长,因此我们可以将它写入到环境变量:

    vi ~/.bashrc  # 打开环境变量配置文件
    # 在里面写入streaming路径
    export STREAM=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar
    source ~/.bashrc
    复制代码
  • 通过streaming接口运行脚本

    hadoop jar $STREAM  -files ./mapper.py,./reducer.py -mapper ./mapper.py -reducer ./reducer.py -input ./input/gutenberg*.txt -output ./output
    复制代码
    • 就会complete啦,你就可以通过如下方式查看计数结果

再次,感谢以下文档的支持: 让python在hadoop上跑起来 streaming介绍

Hadoop实践之Python(一)相关推荐

  1. 【组队学习】【26期】编程实践(Python办公自动化)

    编程实践(Python办公自动化) 论坛版块: http://datawhale.club/c/team-learning/29-category/29 开源内容: https://github.co ...

  2. hadoop程序开发 --- python

    这里以统计单词为例 1 首先建立mapper.py mkdir /usr/local/hadoop-python cd /usr/local/hadoop-python vim mapper.py m ...

  3. 用python实现星期的转换_[Python实践] 利用python实现的日期映射礼拜X的简单实现...

    [Python实践] 利用python实现的日期映射礼拜X的简单实现 2018年12月19日 最近在处理分析数据的时候,突发奇想试着从用户离职的日期上判断是主动辞职还是被动解雇?数据的背景是美国某企业 ...

  4. python wordcount_在Hadoop上用Python实现WordCount

    在hadoop上用Python实现WordCount 一.简单说明 本例中我们用Python写一个简单的运行在Hadoop上的MapReduce程序,即WordCount(读取文本文件并统计单词的词频 ...

  5. Java访问Hadoop实践

    Java访问Hadoop实践 要想访问Hadoop集群,你当然要自己有一个集群呀,否则怎么test,此处有教你怎样用虚拟机搭建Hadoop集群 http://blog.csdn.net/admin19 ...

  6. python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  7. python编程 从入门到实践怎么样-python编程从入门到实践这本书怎么样

    <Python编程-从入门到实践>作者: Eric Matthes,已翻译为中文,人民邮电出版社出版. python编程从入门到实践怎么样? 我们一起看看已经学习的同学对这本书的口碑和评价 ...

  8. itemcf的hadoop实现优化(Python)

    原始数据如下: u1 a,d,b,c u2 a,a,c u3 b,d u4 a,d,c u5 a,b,c 计算公式使用:sim = U(i)∩U(j) / (U(i)∪U(j)) 其中: (U(i)∪ ...

  9. 研效优化实践:Python单测——从入门到起飞

    作者:uniquewang,腾讯安全平台后台开发工程师 福生于微,积微成著,一行代码的精心调试,一条指令的细心验证,一个字节的研磨优化,都是影响企业研发效能工程的细节因素.而单元测试,是指针对软件中的 ...

最新文章

  1. 38.linux集合
  2. [Winform]默认以管理员身份运行程序
  3. php编译成二进制文件_JVM字节码文件概述
  4. 一起撸个朋友圈吧(step5) - 控件篇【评论控件优化】
  5. Expression Blend实例中文教程(4) - 布局控件快速入门Canvas
  6. 中科燕园arcgis外包----排水管网地理信息系统
  7. JUnit与TestNG:您应该选择哪种测试框架?
  8. Window上安装kafka
  9. 【Linux】性能优化-linux命令nicstat 网络性能监控
  10. 卸载idea2020删除以前的配置_推荐一款只有5M大小的绿色良心的卸载工具!
  11. Talking Data副总裁高铎:我们如何赋予大数据生命力
  12. [转]几种图像处理类库的比较
  13. 【贪心】【codevs】1098 均分纸牌
  14. 直线的两点式、一般式以及点到直线的垂点
  15. MyCat - 使用篇(5)
  16. 针式打印机风格英文字体_如何写得一手好看的花体英文
  17. VC 6.0下载 VC 6.0英文版下载 Visual C++ 6.0 英文企业版 集成SP6完美版(最新更新地址,百度网盘)...
  18. android 清理垃圾代码_这7个手机文件夹,让你更了解如何清理手机内存
  19. Spring Boot + Thymeleaf + Echarts 三维地图展示
  20. 【Google Chrome】打开本地html文件报错问题

热门文章

  1. 人工智能学派之间的「联姻」——Yoshua 新作居然用DL「复活」了符号主义
  2. Alpha fold: 人工智能在蛋白质结构预测上跑赢人类的启示
  3. 图神经网络的表达能力,究竟有多强大?
  4. 2020年五大虚拟现实和增强现实趋势
  5. “用手机就能访问卫星” 软件定义升级卫星智能
  6. 由4G向5G进发的物联网:NB-IoT与LTE-M
  7. 不用恐惧AI的高速发展,论击败阿法狗(零)最简单的方法
  8. CTO梁军离职,市值蒸发59亿,核心技术人才仅剩3人!寒武纪“动荡”的6周年
  9. 阿里内部不显示 P 序列职级,“高 P”光环成过去式?网友:这下可以装大佬了...
  10. 高通研发VR软件进军医疗领域,帮助医生诊断中风病患