Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Hadoop上运行Python脚本

在Hadoop上运行Python脚本

作者头像
py3study
发布于 2020-01-06 04:10:03
发布于 2020-01-06 04:10:03
4.7K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

之前已经配置好了Hadoop以及Yarn,可那只是第一步。下面还要在上面运行各种程序,这才是最重要的。

Ubuntu安装时默认已经安装了Python, 可以通过Python –version 查询其版本。

因此我们可以直接运行python的脚本了。

Python MapReduce Code

这里我们要用到 Hadoop Streaming API, 通过STIDN(Standard input)和 STDOUT(Standard output)来向Map代码、Reduce代码传递数据。 Python有sys.stdin可以直接读取数据,sys.stdout来输出数据。

1 . 首先建立mapper.py.

用VIM建立mapper.py, 将文件存在/home/hadoop路径下, 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python

import sys

# input comes from STDIN (standard input)
for line in sys.stdin:
    # remove leading and trailing whitespace
    line = line.strip()
    # split the line into words
    words = line.split()
    # increase counters
    for word in words:
        # write the results to STDOUT (standard output);
        # what we output here will be the input for the
        # Reduce step, i.e. the input for reducer.py
        #
        # tab-delimited; the trivial word count is 1
        print '%s\t%s' % (word, 1)

注意,保存时存为unix编码的,可以参考另一篇文章: 编码问题

文件保存后,请注意将其权限作出相应修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod a+x /home/hadoop/mapper.py

2 . 建立reduce.py 用VIM建立reduce.py, 将文件存在/home/hadoop路径下, 代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python

from operator import itemgetter
import sys

current_word = None
current_count = 0
word = None

# input comes from STDIN
for line in sys.stdin:
    # remove leading and trailing whitespace
    line = line.strip()

    # parse the input we got from mapper.py
    word, count = line.split('\t', 1)

    # convert count (currently a string) to int
    try:
        count = int(count)
    except ValueError:
        # count was not a number, so silently
        # ignore/discard this line
        continue

    # this IF-switch only works because Hadoop sorts map output
    # by key (here: word) before it is passed to the reducer
    if current_word == word:
        current_count += count
    else:
        if current_word:
            # write result to STDOUT
            print '%s\t%s' % (current_word, current_count)
        current_count = count
        current_word = word

# do not forget to output the last word if needed!
if current_word == word:
    print '%s\t%s' % (current_word, current_count)

文件保存后,请注意将其权限作出相应修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod a+x /home/hadoop/reduce.py

首先可以在本机上测试以上代码,这样如果有问题可以及时发现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~$ echo "foo foo quux labs foo bar quux" | /home/hduser/mapper.py

运行结果如下:

再运行以下包含reducer.py的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~$ echo "foo foo quux labs foo bar quux" | /home/hduser/mapper.py | sort -k1,1 | /home/hduser/reducer.py

结果如下:

在Hadoop上运行Python代码

准备工作: 下载文本文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~$ mkdir tmp/guteberg
cd tmp/guteberg
 wget http://www.gutenberg.org/files/5000/5000-8.txt
 wget http://www.gutenberg.org/cache/epub/20417/pg20417.txt

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ hdfs dfs -mkdir /user/input # 在hdfs上的该用户目录下创建一个输入文件的文件夹
$ hdfs dfs -put /home/hadoop/tmp/gutenberg/*.txt /user/input # 上传文档到hdfs上的输入文件夹中

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd $HADOOP_HOME
$ find ./ -name "*streaming*.jar"

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

由于这个文件的路径比较长,因此我们可以将它写入到环境变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi ~/.bashrc  # 打开环境变量配置文件
# 在里面写入streaming路径
export STREAM=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hadoop jar $STREAM  \
-files /home/hadoop/mapper.py, /home/hadoop/reducer.py \
-mapper  /home/hadoop/mapper.py \
-reducer  /home/hadoop/reducer.py \
-input /user/input/*.txt \
 -output /user/output

然后”source run.sh”来执行mapreduce。结果就响当当的出来啦。

用cat来看一下输出结果如下:


参考 : http://www.cnblogs.com/wing1995/p/hadoop.html?https://hadoop.apache.org/docs/r1.2.1/streaming.html http://hustlijian.github.io/tutorial/2015/06/19/Hadoop%E5%85%A5%E9%97%A8%E4%BD%BF%E7%94%A8.html http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用python编写hadoop的mapper 和reducer
Hadoop 本身是用 Java 开发的,程序也需要用 Java 编写,但是通过 Hadoop Streaming,我们可以使用任意语言来编写程序,让 Hadoop 运行。
gzq大数据
2020/11/11
2.4K0
使用Python语言写Hadoop MapReduce程序
在了解到Hadoop的生态环境以及Hadoop单机模式和伪分布式模式安装配置之后,我们可以使用自己熟悉的语言来编写Hadoop MapReduce程序,进一步了解MapReduce编程模型。
职场亮哥
2020/10/10
4.8K0
Python使用Hadoop进行词频统计
今天,我们利用python编写一个MapReduce程序,程序的目的还是百年不变的计算单词个数,也就是WordCunt。
钱塘小甲子
2019/01/28
2.5K0
Hadoop Streaming:用 Python 编写 Hadoop MapReduce 程序
随着数字媒体、物联网等发展的出现,每天产生的数字数据量呈指数级增长。这种情况给创建下一代工具和技术来存储和操作这些数据带来了挑战。这就是 Hadoop Streaming 的用武之地!下面给出的图表描绘了从 2013 年起全球每年产生的数据增长情况。 IDC 估计,到 2025 年,每年产生的数据量将达到 180 Zettabytes!
玖柒的小窝
2021/09/17
7860
Hadoop Streaming:用 Python 编写 Hadoop MapReduce 程序
用Python来写MapReduce之Wordcount
虽然Hadoop是用Java编写的一个框架, 但是并不意味着他只能使用Java语言来操作, 在Hadoop-0.14.1版本后, Hadoop支持了Python和C++语言, 在Hadoop的文档中也表示可以使用Python进行开发, 通常来说都会考虑将源码打包成jar包再运行, 例子: PythonWordCount 这明显不方便. 在Hadoop的文档中提到了Hadoop Streaming, 我们可以使用流的方式来操作它. 它的语法是
YingJoy_
2018/12/24
2.2K0
Python海量数据处理之_Hadoop
 前两篇分别介绍了Hadoop的配置方法和基本原理,本篇将介绍如何让程序借助Hadoop调用服务器集群中的算力。Hadoop是Java语言实现的,它不仅支持Java,还支持C++,Python等程序的分布计算。下面以Python为例介绍如何使用Hadoop的MapReduce功能。
py3study
2020/01/09
1K0
数据挖掘PageRank算法(网页排名原理)及Map-Reduce实现
方法/步骤 1 一、什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO(^_^)。PageRank算法计算每一个网页的PageRank值,然后根据这个值的大小对网页的重要性进行排序。它的思想是模拟一个悠闲的上 网者,上网者首先随机选择一个网页打开,然后在这个网页上呆了几分钟后,跳转到该网页所指向的链接,这样无所事事、漫无目的地在网页上跳来跳 去,Pag
学到老
2018/03/16
1.6K0
数据挖掘PageRank算法(网页排名原理)及Map-Reduce实现
Streaming执行Python版Wo
hadoop jar /home/hadoop/hadoop-2.6.0-cdh5.5.2/share/hadoop/tools/lib/hadoop-streaming-2.6.0-cdh5.5.2.jar  -input /user/hadoop/aa.txt -output /user/hadoop/python_output -mapper "python mapper.py" -reducer "python reducer.py" -file mapper.py -file reducer.py
py3study
2020/01/06
4660
图解大数据 | 实操案例-MapReduce大数据统计
教程地址:http://www.showmeai.tech/tutorials/84
ShowMeAI
2022/03/08
9620
图解大数据 | 实操案例-MapReduce大数据统计
hadoop2.7第一个python实例
没有任何基础,第一次跑hadoop实例,遇到不少问题,记录下来以便自查和帮助同样情况的hadoop学习者。
py3study
2020/01/13
6780
Python 版 WordCount
前言 本章介绍如何使用 Python 借助 Hadoop Streming 来完成 MapReduce 任务。 其实 Hadoop Streming 很简单,但是我在网上搜索学习的时候,发现好多文章内容都是类似的,而且还有些晦涩难懂,故自己记录下完整的过程,以便能帮到更多学习的人。 本次是基于 Hadoop 伪分布式环境搭建 这篇文章中的环境来操作的。 Hadoop Streming Hadoop Streaming提供了一个便于进行MapReduce编程的工具包,使用它可以基于一些可执行命令、脚本
一份执着✘
2018/06/04
1.3K0
用Python来写MapReduce的实
用Python来写分布式的程序。这样速度快。便于调试,更有实际意义。MapReduce适合于对文本文件的处理及数据挖掘用:
py3study
2020/01/09
4210
Hadoop3.0基础平台搭建(三节点),以及案例运行并使用python生成词云
链接: https://pan.baidu.com/s/1dvf4o8i9J02fmUu3SMRyDw 提取码: 3dk3
指剑
2022/07/13
6000
Hadoop3.0基础平台搭建(三节点),以及案例运行并使用python生成词云
Hadoop(三)通过C#/python实现Hadoop MapReduce
Hadoop中将数据切分成块存在HDFS不同的DataNode中,如果想汇总,按照常规想法就是,移动数据到统计程序:先把数据读取到一个程序中,再进行汇总。
Chester Chen
2022/08/18
4470
Hadoop(三)通过C#/python实现Hadoop MapReduce
hadoop streaming编程小demo(python版)
大数据团队搞数据质量评测。自动化质检和监控平台是用django,MR也是通过python实现的。(后来发现有orc压缩问题,python不知道怎么解决,正在改成java版本) 这里展示一个python编写MR的例子吧。 抄一句话:Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer。 1、首先,先介绍一下背景,我们的数据是存放在hive里的。hive建表语句如下: 我们将会解析元数据,和HDFS上的数据进行merge,方便
用户1225216
2018/03/05
1.1K0
用python解释mapreduce
map import sys #输入为标准输出stdin for line in sys.stdin: #删除开头和结尾的空行 line = line.strip() #以默认空格分隔单词到words列表 words = line.split() for word in words: #输出所有单词,格式为“单词,1”以便为reduce的输入 print '%s %s' % (word,1) reduce import sys cur
零月
2018/04/25
7220
用python解释mapreduce
用PHP编写Hadoop的MapReduce程序
hello 1 world 1″
黄规速
2022/04/14
2K0
Python过气,Hadoop凉了?零基础项目实战诠释何为经典
工欲善其事,必先利其器。Python 作为一种跨平台的编程语言,具有解释性、变异性、交互性和面向对象的特点,可应用于独立的项目开发。今天,我们特邀了公众号“冰河技术”作者、腾讯云 TVP 冰河老师,他将为我们带来基于 Python+Hadoop 手把手教学如何实现单词统计。
腾讯云开发者
2023/12/14
6850
Python过气,Hadoop凉了?零基础项目实战诠释何为经典
Hadoop/R 集成 I:流处理
原文地址:https://dzone.com/articles/hadoopr-integration-i
大数据弄潮儿
2018/05/28
7270
如何使用Python为Hadoop编写一个简单的MapReduce程序
How to Install Hadoop in Stand-Alone Mode on Ubuntu 16.04 如何使用Python 为 Hadoop编写一个简单的MapReduce程序。 尽管Hadoop框架是使用Java编写的但是我们仍然需要使用像C++、Python等语言来实现Hadoop程序。尽管Hadoop官方网站给的示例程序是使用Jython编写并打包成Jar文件,这样显然造成了不便,其实,不一定非要这样来实现,我们可以使用Python与Hadoop 关联进行编程,看看位于/src/exa
MachineLP
2018/01/09
2.3K0
相关推荐
使用python编写hadoop的mapper 和reducer
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验