返回顶部
首页 > 资讯 > 后端开发 > Python >让python在hadoop上跑起来
  • 812
分享到

让python在hadoop上跑起来

pythonhadoop 2022-06-04 19:06:57 812人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本文实例讲解的是一般的hadoop入门程序“WordCount”,就是首先写一个map程序用来将输入的字符串分割成单个的单词,然后reduce这些单个的单词,相同的单词就对其进行计数,不同的单词分别输出,结

本文实例讲解的是一般的hadoop入门程序“WordCount”,就是首先写一个map程序用来将输入的字符串分割成单个的单词,然后reduce这些单个的单词,相同的单词就对其进行计数,不同的单词分别输出,结果输出每一个单词出现的频数。

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

1.mapper.py


#!/usr/bin/env python
import sys

for line in sys.stdin: # 遍历读入数据的每一行
  
  line = line.strip() # 将行尾行首的空格去除
  words = line.split() #按空格将句子分割成单个单词
  for word in words:
    print '%st%s' %(word, 1)

2.reducer.py


#!/usr/bin/env Python

from operator import itemgetter
import sys

current_word = None # 为当前单词
current_count = 0 # 当前单词频数
word = None

for line in sys.stdin:
  words = line.strip() # 去除字符串首尾的空白字符
  word, count = words.split('t') # 按照制表符分隔单词和数量
  
  try:
    count = int(count) # 将字符串类型的‘1'转换为整型1
  except ValueError:
    continue

  if current_word == word: # 如果当前的单词等于读入的单词
    current_count += count # 单词频数加1
  else:
    if current_word: # 如果当前的单词不为空则打印其单词和频数
      print '%st%s' %(current_word, current_count) 
    current_count = count # 否则将读入的单词赋值给当前单词,且更新频数
    current_word = word

if current_word == word:
  print '%st%s' %(current_word, current_count)

shell中运行以下脚本,查看输出结果:


echo "foo foo quux labs foo bar zoo zoo hying" | /home/wuying/mapper.py | sort -k 1,1 | /home/wuying/reducer.py

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

其实,我觉得后面这个reducer.py处理单词频数有点麻烦,将单词存储在字典里面,单词作为‘key',每一个单词出现的频数作为'value',进而进行频数统计感觉会更加高效一点。因此,改进脚本如下:

mapper_1.py

查看图片

但是,貌似写着写着用了两个循环,反而效率低了。关键是不太明白这里的current_word和current_count的作用,如果从字面上老看是当前存在的单词,那么怎么和遍历读取的word和count相区别?

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

查看图片

我们可以看到,上面同样的输入数据,同样的shell换了不同的reducer,结果后者并没有对数据进行排序,实在是费解~

让Python代码在hadoop上跑起来!

一、准备输入数据

接下来,先下载三本书:


$ mkdir -p tmp/gutenberg
$ cd tmp/gutenberg
$ wget Http://www.gutenberg.org/ebooks/20417.txt.utf-8
$ wget http://www.gutenberg.org/files/5000/5000-8.txt
$ wget http://www.gutenberg.org/ebooks/4300.txt.utf-8

然后把这三本书上传到hdfs文件系统上:


 $ hdfs dfs -mkdir /user/${whoami}/input # 在hdfs上的该用户目录下创建一个输入文件的文件夹
 $ hdfs dfs -put /home/wuying/tmp/gutenberg/*.txt /user/${whoami}/input # 上传文档到hdfs上的输入文件夹中

寻找你的streaming的jar文件存放地址,注意2.6的版本放到share目录下了,可以进入hadoop安装目录寻找该文件:


$ cd $HADOOP_HOME
$ find ./ -name "*streaming*"

然后就会找到我们的share文件夹中的hadoop-straming*.jar文件:

查看图片

寻找速度可能有点慢,因此你最好是根据自己的版本号到对应的目录下去寻找这个streaming文件,由于这个文件的路径比较长,因此我们可以将它写入到环境变量:


$ vi ~/.bashrc # 打开环境变量配置文件
# 在里面写入streaming路径
export STREAM=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar

由于通过streaming接口运行的脚本太长了,因此直接建立一个shell名称为run.sh来运行:


hadoop jar $STREAM 
-files ./mapper.py,./reducer.py 
-mapper ./mapper.py 
-reducer ./reducer.py 
-input /user/$(whoami)/input/*.txt 
-output /user/$(whoami)/output

然后"source run.sh"来执行mapReduce。结果就响当当的出来啦。这里特别要提醒一下:

1、一定要把本地的输入文件转移到hdfs系统上面,否则无法识别你的input内容;

2、一定要有权限,一定要在你的hdfs系统下面建立你的个人文件夹否则就会被denied,是的,就是这两个错误搞得我在服务器上面痛不欲生,四处问人的感觉真心不如自己清醒对待来的好;

3、如果你是第一次在服务器上面玩hadoop,建议在这之前请在自己的虚拟机或者linux系统上面配置好伪分布式然后入门hadoop来的比较不那么头疼,之前我并不知道我在服务器上面运维没有给我运行的权限,后来在自己的虚拟机里面运行一下example实例以及wordcount才找到自己的错误。

好啦,然后不出意外,就会complete啦,你就可以通过如下方式查看计数结果:

查看图片

以上就是本文的全部内容,希望对大家学习python软件编程有所帮助。

--结束END--

本文标题: 让python在hadoop上跑起来

本文链接: https://lsjlt.com/news/15452.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 让python在hadoop上跑起来
    本文实例讲解的是一般的hadoop入门程序“WordCount”,就是首先写一个map程序用来将输入的字符串分割成单个的单词,然后reduce这些单个的单词,相同的单词就对其进行计数,不同的单词分别输出,结...
    99+
    2022-06-04
    python hadoop
  • 20招让你的Python飞起来!
    今天分享的这篇文章,文字不多,代码为主。绝对干货,童叟无欺,主要分享了提升 Python 性能的 20 个技巧,教你如何告别慢Python。原文作者 开元,全栈程序员,使用 Python, Java, PH...
    99+
    2022-06-04
    飞起 Python
  • 利用 Python 让图表动起来
    用Matplotlib和Seaborn这类Python库可以画出很好看的图,但是这些图只是静态的,难以动态且美观地呈现数值变化。要是在你下次的演示、视频、社交媒体Po文里能用短视频呈...
    99+
    2024-04-02
  • 怎么用Python让图片人物动起来
    本篇内容主要讲解“怎么用Python让图片人物动起来”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python让图片人物动起来”吧!其中通过在静止图像中动画对象产生视频有无数的应用跨越的领...
    99+
    2023-06-15
  • 在Hadoop上运行Python脚本
    之前已经配置好了Hadoop以及Yarn,可那只是第一步。下面还要在上面运行各种程序,这才是最重要的。 Ubuntu安装时默认已经安装了Python, 可以通过Python –version 查询其版本。 因此我们可以直接运...
    99+
    2023-01-31
    脚本 Hadoop Python
  • Python first-order-model怎么实现让照片动起来
    这篇文章主要介绍“Python first-order-model怎么实现让照片动起来”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python first-order-mode...
    99+
    2023-07-02
  • 如何让利用Python+AI使静态图片动起来
    目录前言:1. 运行项目2. Python API前言: 这种技术一般是基于的GAN(生成对抗网络)来实现,今天我给大家分享一个开源项目,能够复现静态图片动起来效果,可以做些有趣的项...
    99+
    2024-04-02
  • 让Python代码飞起来,高手必用十个VSCode插件
    作为一名 Python 程序员,VSCode 中的插件能够帮助我们更高效地进行开发,提高代码的质量和效率。在这篇文章中,我将为大家推荐一些常用的 Python VSCode 插件,希望能够帮助大家更好地利用 VSCode 进行 Python...
    99+
    2023-05-14
    程序员 Python VSCode
  • 如何让一个网站看起来高大上且更有设计感
    本篇内容主要讲解“如何让一个网站看起来高大上且更有设计感”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何让一个网站看起来高大上且更有设计感”吧!“如何让一个网站看起来高大上?或者更有设计感?”...
    99+
    2023-06-08
  • Python中看起来高大上的技术有哪些
    本篇内容介绍了“Python中看起来高大上的技术有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!元编程简单来说,元编程就是可以操作目标语...
    99+
    2023-06-15
  • 揭秘 Python 性能优化秘籍,让你的代码飞起来!
    1. 数据结构选择: 不同的数据结构具有不同的存储和访问效率,选择合适的数据结构对于 Python 性能优化至关重要。例如,列表适合存储顺序数据,字典适用于快速查找,集合用于存储唯一元素。 # 优化后 name_set = set(na...
    99+
    2024-02-15
    Python 性能优化 代码优化 数据结构 算法 并发
  • 怎么写出让人看起来很优雅舒服的python代码
    这篇文章将为大家详细讲解有关怎么写出让人看起来很优雅舒服的python代码,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。很多新手在开始学一门新的语言的时候,往往会忽视一些不应该忽视的细节,比...
    99+
    2023-06-02
  • Python小实例混合使用turtle和tkinter让小海龟互动起来
    Turtle 窗口 请看下图,turtle窗口图标是一片小叶子,估计它就是继承自 tkinter 库。 tkinter 窗口 参阅了一些资料,发现 turtle 方法可直接在 tk...
    99+
    2024-04-02
  • Python 网络编程性能优化指南:让你的应用飞起来
    选择合适的网络库 Python 有各种各样的网络库可供选择,每个库都有自己的优缺点。对于要求性能的应用程序,通常建议使用异步库,如 asyncio 或 trio。这些库允许您的应用程序同时处理多个请求,从而提高吞吐量和响应时间。 ...
    99+
    2024-02-13
    Python 网络编程 性能优化 网络编程
  • 还在为 Python 并发编程烦恼?试试这些 bash 函数,让你的程序飞起来!
    Python 是一种非常流行的编程语言,但是在处理大量数据时,Python 的速度有时候可能会成为瓶颈,特别是在处理大量并发请求的时候。这时候,我们需要使用并发编程技术来提高程序的性能,而 Python 也提供了许多并发编程的库,如 thr...
    99+
    2023-07-08
    并发 bash 函数
  • Python 多线程与多进程:性能优化秘籍,让你的代码飞起来
    多线程与多进程的概念 多线程: 多线程是一种并发编程技术,它允许在一个程序中同时执行多个任务。 Python中的多线程是通过threading模块实现的。 多线程共享相同的内存空间,因此可以轻松地共享数据。 多线程的优点是实现简单...
    99+
    2024-02-24
    Python 多线程 多进程 并发 性能优化
  • 如何在 Python 中存储 Apache?让我们来了解一下!
    在 Web 开发中,Apache 是一种非常流行的 Web 服务器软件。但是,在使用 Apache 时,我们需要考虑如何存储它的配置文件以及 Web 应用程序的数据。Python 是一种非常流行的编程语言,它可以帮助我们轻松地存储 Apa...
    99+
    2023-10-15
    存储 apache 面试
  • 你知道Python在Linux中如何使用HTTP吗?一起来学习吧!
    Python是一门十分流行的编程语言,拥有广泛的应用场景。其中,Python在Linux操作系统中的应用越来越受到开发者的青睐。本文将介绍如何在Linux中使用Python进行HTTP请求,并附带演示代码。 HTTP是一种用于传输超文本的协...
    99+
    2023-10-15
    linux http 面试
  • Python、Javascript 和 Unix:如何在接口层面上将它们融合在一起?
    在当今的软件开发领域中,Python 和 Javascript 成为了两种最流行的编程语言之一,而 Unix 系统则是最广泛使用的操作系统之一。这三者的结合可以让开发者在接口层面上更加高效地完成任务,本文将介绍如何将它们融合在一起。 使...
    99+
    2023-08-27
    javascript unix 接口
  • Python数据库操作的艺术:让数据在你的指尖翩翩起舞
    Python数据库操作的艺术,在于能够轻松、高效地处理数据,满足各种数据处理需求。本文将从Python数据库操作的基础知识开始,逐步深入讲解各种数据操作技术,并通过大量的代码示例,让你快速掌握Python数据库操作的精髓。 一、Pyth...
    99+
    2024-02-07
    Python 数据库 操作 SQLAlchemy ORM
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作