mapreduce(python开发)

开发mapreduce

简介: MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:

(1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
(2)MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
(3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理 。

简言之: mapreduce是一种计算引擎,可以把我们对大批量数据的计算通过抽象成map与reduce两个子任务进行计算从而更快的得到想要的结果。

1.第一个mapreduce任务

目的: 通过使用官方自带的jar任务计算pi的值

准备工作:

# 启动hadoop集群
start-all.sh
# 进入hadoop自带mapreduce任务目录下
cd /share/hadoop/mapreduce
# 查看当前路径下的文件
ls

在这里插入图片描述
hadoop运行jar任务:

这次我们使用到的jar包是hadoop-mapreduce-examples-2.7.3.jar这个包

# 运行mapreduce任务
hadoop jar hadoop-mapreduce-examples-2.7.3.jar pi 5 100 
//参数说明 pi + map数量 + reduce数量

运行日志:
在这里插入图片描述
运行结果:
在这里插入图片描述

注:当map与reduce的值取得越大时,pi的值会越精确

2.使用python开发mapreduce任务

任务目的: 统计单词数量

准备工作:

# 创建word.txt
vi word.txt

# 在word.txt中添加几行单词
hadoop is good
spark is fast
spark is better
python is basics
java also good
hbase is nosql
mysql is relational database
mongdb is nosql
relational database or nosql is good

# 将word.txt上传到hdfs的data文件夹下
hadoop dfs -put word.txt /data

map代码

#!/usr/bin/env python
import sys
words=[]
for i in sys.stdin:
        i=i.strip()
        word=i.split(" ")
        words.append(word)
for i in words:
        for j in i:
                print(j,1)

reduce代码

#!/usr/bin/env python
from operator import itemgetter
import sys

words=[]
num=[]
index=-1
for i in sys.stdin:
        word=i.strip()
        word=word.split(" ")
        word[1]=int(word[1])
        for i in range(len(words)):
                if(words[i][0]==word[0]):
                        index=i
        if(index==-1):
                words.append(word)
        if(index!=-1):
                words[index][1]+=1
                index=-1
for i in words:
        print(i)

在本地测试代码:

cat word.txt |python map.py|python reduce.py

在这里插入图片描述
hadoop运行mapreduce

说明:mapreduce支持除java以外其他语言进行开发,需要使用hadoop-streaming-2.7.3.jar 这个计算框架运行mapreuce任务。

# 运行mapreduce任务
hadoop jar /home/hadoop1/hadoop-2.7.3/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -files /root/map.py,/root/reduce.py -mapper "python /root/map.py" -reducer "python /root/reduce.py" -input /data/word.txt -output /data/out_python1
//参数说明 hadoop jar +hadoop-streaming-2.7.3.jar所在路径 -file+
编写的map与reduce代码文件所在路径 -mapper +执行map文件命令 -reducer +执行reduce文件命令 -input +输入文件在hdfs的路径 -output +输出文件所在hdfs的路径

运行日志:
在这里插入图片描述
运行结果:
在这里插入图片描述

  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值