1.概述
Hadoop Streaming提供了一个便于进行MapReduce编程的工具包,使用它可以基于一些可执行命令、脚本语言或其他编程语言来实现Mapper和 Reducer,从而充分利用Hadoop并行计算框架的优势和能力,来处理大数据。需要注意的是,Streaming方式是基于Unix系统的标准输入 输出来进行MapReduce Job的运行,它区别与Pipes的地方主要是通信协议,Pipes使用的是Socket通信,是对使用C++语言来实现MapReduce Job并通过Socket通信来与Hadopp平台通信,完成Job的执行。任何支持标准输入输出特性的编程语言都可以使用Streaming方式来实现MapReduce Job,基本原理就是输入从Unix系统标准输入,输出使用Unix系统的标准输出。
2.Hadoop Streaming原理
mapper和reducer会从标准输入中读取用户数据,一行一行处理后发送给标准输出。Streaming工具会创建MapReduce作业,发送给各个tasktracker,同时监控整个作业的执行过程。
如果一个文件(可执行或者脚本)作为mapper,mapper初始化时,每一个mapper任务会把该文件作为一个单独进程启动,mapper任 务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。 同时,mapper收集可执行文件进程标准输出的内容,并把收到的每一行内容转化成key/value对,作为mapper的输出。 默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为value。如果没有tab,整行作为key值,value值为null。
对于reducer,类似。以上是Map/Reduce框架和streaming mapper/reducer之间的基本通信协议。
3.Hadoop Streaming用法
Usage: $HADOOP_HOME/bin/hadoop jar \
$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.7.0.jar
options:
(1)-input:输入文件路径
(2)-output:输出文件路径
(3)-mapper:用户自己写的mapper程序,可以是可执行文件或者脚本
(4)-reducer:用户自己写的reducer程序,可以是可执行文件或者脚本
(5)-file:打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典等。
(6)-partitioner:用户自定义的partitioner程序
(7)-combiner:用户自定义的combiner程序(必须用java实现)
(8)-D:作业的一些属性(以前用的是-jonconf),具体有:
1)mapred.map.tasks:map task数目
2)mapred.reduce.tasks:reduce task数目
3)stream.map.input.field.separator/stream.map.output.field.separator: map task输入/输出数据的分隔符,默认均为\t。
4)stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目
5)stream.reduce.input.field.separator/stream.reduce.output.field.separator:reduce task输入/输出数据的分隔符,默认均为\t。
6)stream.num.reduce.output.key.fields:指定reduce task输出记录中key所占的域数目
另外,Hadoop本身还自带一些好用的Mapper和Reducer:
4.使用示例
使用Python编写MapReduce代码的技巧就在于我们使用了 HadoopStreaming 来帮助我们在Map 和 Reduce间传递数据通过STDIN (标准输入)和STDOUT (标准输出).我们仅仅使用Python的sys.stdin来输入数据,使用sys.stdout输出数据,这样做是因为 HadoopStreaming会帮我们办好其他事。这是真的,别不相信!
举例
将下列的代码保存在/usr/local/hadoop/mapper.py中,他将从STDIN读取数据并将单词成行分隔开,生成一个列表映射单词与发生次数的关系:注意:要确保这个脚本有足够权限(chmod +x mapper.py)。
#!/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)
将代码存储在/usr/local/hadoop/reducer.py 中,这个脚本的作用是从mapper.py 的STDIN中读取结果,然后计算每个单词出现次数的总和,并输出结果到STDOUT。同样,要注意脚本权限:chmod +x reducer.py
#!/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)
测试结果:
hadoop@derekUbun:/usr/local/hadoop$ echo "foo foo quux labs foo bar quux" | ./mapper.py
foo 1
foo 1
quux 1
labs 1
foo 1
bar 1
quux 1
hadoop@derekUbun:/usr/local/hadoop$ echo "foo foo quux labs foo bar quux" |./mapper.py | sort |./reducer.py
bar 1
foo 3
labs 1
quux 2
实例
需求:这里面只是个小练习,没有多高深,简单的不能再简单,只是一个小实例,做个抛砖的作用。
写一个mapreduce streaming程序(可使用任意语言,这里我们用python),将数据转换成“key=value”的格式,其中,key包括“ip”、“time”、“path”三个,
比如,175.44.30.93 - - [29/Sep/2013:00:10:16 +0800] "GET /structure/heap/ HTTP/1.1" 200 22539 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1;)"
转化为:ip=175.44.30.93|time=29/Sep/2013:00:10:16|path=/structure/heap/ 其中,不同key/value之间用“|”分割。
具体步骤:
1.将日志文件上传到hdfs上 hadoop fs -put 文件 目的地
2.编程程序,这个比较简单,我觉得只用mapper就能实现,我就只写了一个mapper。
#!/usr/bin/env python
# -*- coding: utf-8 -*- import sys for line in sys.stdin: #接受系统的标准输入
line = line.strip()
lists = line.split()
print 'ip=%s|time=%s|path=%s' %(lists[0],lists[3].strip('[]'),lists[6])#处理成想要的结果
3.测试程序执行命令
hadoop jar /home/biedong/hadoop-2.7.0/share/hadoop/tools/lib/hadoop-streaming-2.7.0.jar -mapper /home/biedong/test/mapper1.py -input /home/zuoye/access.log -output /home/zuoye/book-output
执行报错:提示找不多执行程序, 比如“Caused by: java.io.IOException: Cannot run program “/user/hadoop/Mapper”: error=2, No such file or directory”:
解决办法:可在提交作业时,采用-file选项指定这些文件, 比如上面例子中,可以使用“-file Mapper -file Reducer” 或者 “-file Mapper.py -file Reducer.py”, 这样,Hadoop会将这两个文件自动分发到各个节点上。
hadoop jar /home/biedong/hadoop-2.7.0/share/hadoop/tools/lib/hadoop-streaming-2.7.0.jar -mapper /home/biedong/test/mapper1.py -file /home/biedong/test/mapper1.py -input /home/zuoye/access.log -output /home/zuoye/book-output
执行完成后在hdfs上的结果:文件输出正常,结果也正常1904条。
aaarticlea/png;base64,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*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" alt="" />
4.加个reducer吧,这个比较简单,因为mapper已经处理好了,我直接接受mapper的输入,完了直接打印出来。
#!/usr/bin/env python
# -*- coding: utf-8 -*- import sys for line in sys.stdin:
print line
问题是:多出一个空行
aaarticlea/png;base64,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" alt="" />
原因查找:默认情况下,Streaming使用\t分离记录中得键和值,当没有\t时,整个记录被视为键,值为空白文本。 在mapper输出的时候会自动在尾行加上\t 因此在reducer接受后,会把数据直接按照\t拆分成k和v两个,只是k是mapper的数据行,v是空白,如果咱们直接输出结果的话,就会有空白行。
Python实现Hadoop MapReduce程序的更多相关文章
-
使用Python实现Hadoop MapReduce程序
转自:使用Python实现Hadoop MapReduce程序 英文原文:Writing an Hadoop MapReduce Program in Python 根据上面两篇文章,下面是我在自己的 ...
-
[python]使用python实现Hadoop MapReduce程序:计算一组数据的均值和方差
这是参照<机器学习实战>中第15章“大数据与MapReduce”的内容,因为作者写作时hadoop版本和现在的版本相差很大,所以在Hadoop上运行python写的MapReduce程序时 ...
-
简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行
[TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...
-
用Python语言写Hadoop MapReduce程序Writing an Hadoop MapReduce Program in Python
In this tutorial I will describe how to write a simple MapReduce program for Hadoop in the Python pr ...
-
HDFS基本命令与Hadoop MapReduce程序的执行
一.HDFS基本命令 1.创建目录:-mkdir [jun@master ~]$ hadoop fs -mkdir /test [jun@master ~]$ hadoop fs -mkdir /te ...
-
Intellij idea开发Hadoop MapReduce程序
1.首先下载一个Hadoop包,仅Hadoop即可. http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0 ...
-
Hadoop MapReduce程序中解决第三方jar包问题方案
hadoop怎样提交多个第三方jar包? 方案1:把所有的第三方jar和自己的class打成一个大的jar包,这种方案显然笨拙,而且更新升级比较繁琐. 方案2: 在你的project里面建立一个lib ...
-
Python初次实现MapReduce——WordCount
前言 Hadoop 本身是用 Java 开发的,所以之前的MapReduce代码小练都是由Java代码编写,但是通过Hadoop Streaming,我们可以使用任意语言来编写程序,让Hadoop 运 ...
-
Hadoop(三):MapReduce程序(python)
使用python语言进行MapReduce程序开发主要分为两个步骤,一是编写程序,二是用Hadoop Streaming命令提交任务. 还是以词频统计为例 一.程序开发1.Mapper for lin ...
随机推荐
-
maven解决.lastUpdated maven无法下载jar
话说,这个问题困扰了我两个多月了已经~~~ 后来发现不知道被谁动了,把我的仓库没有放到仓库组里面~~~ 用admin登录进去,默认密码是admin123,然后看截图操作吧. (记得删除你本地报错说** ...
-
awk内置函数
gsub(r,s,t) 在字符串t中,用字符串s替换和正则表达式r匹配的所有字符串.返回替换的个数.如果没有给出t,缺省为$0 index(s,t) 返回s 中字符串t 的位置,不出现时为0 leng ...
-
redis配置文件之复制
主从复制使用slaveof将Redis实例作为另一个Redis服务器的副本. 1) Redis复制是异步的,master可以配置成如果它连接的slave没有达到给定的数量,就停止接受写入.2) 如果断 ...
-
Centos下安装Lamp和vsftpd、redis
yum安装httpd和php.mysql服务 yum search httpd //搜索httpd开头的软件包 yum install httpd.x86_64 //找到apache 对应的软件包名 ...
-
less初学手记
less语言学习手记 工具下载 在less学习中,我们都会需要随时编译我们的less文件,查看生成的css样式表是否正确,以及是否符合我们的要求.推荐一款编译软件供大家下载使用:koala,本软件支持 ...
-
史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件. 注意情况: 该案例使用的spring-boot版本1.5.x,没使用2.0.x, 另外本文图3 ...
-
读取html文件,让其中的内容和notepad打开这个html的样子一样。
然后我写了个python代码,让其读取这个html文件后,内容和这个一样: htmlf=open('13144815898.html','r',encoding="utf-8") ...
-
BZOJ3270: 博物馆【概率DP】【高斯消元】
Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...
-
HDU 6166 Spfa
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6166 题意:给出一个n个点的有向图.然后给你k个点,求这k个点任意两点之间的最短路的最小值.思路: 以 ...
-
mac/linux自带定时任务执行crontab的使用
1.编辑定时任务信息 sudo crontab -e #以root用户创建,也可以 -u 参数 编辑内容如下: 频率表达式分别对应为 分.时.日.周.月 LANG=zh_CN.UTF-8 */30 * ...