hadoop-streaming 例子

Hadoop Streaming是Hadoop提供的一个编程工具,它容许用户使用任何可执行文件或者脚本文件做为Mapper和Reducer,例如: java

采用shell脚本语言中的一些命令做为mapper和reducer(cat做为mapper,wc做为reducer) shell

bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar -input
input -output output -mapper /bin/cat -reducer /usr/bin/wc

mapper和reducer会从标准输入中读取用户数据,一行一行处理后发送给标准输出。Streaming工具会建立MapReduce做业,发送给各个tasktracker,同时监控整个做业的执行过程。 编程

若是一个文件(可执行或者脚本)做为mapper,mapper初始化时,每个mapper任务会把该文件做为一个单独进程启动,mapper任务运行时,它把输入切分红行并把每一行提供给可执行文件进程的标准输入。 同时,mapper收集可执行文件进程标准输出的内容,并把收到的每一行内容转化成key/value对,做为mapper的输出。 默认状况下,一行中第一个tab以前的部分做为key,以后的(不包括tab)做为value。若是没有tab,整行做为key值,value值为null。 app

对于reducer,相似。 框架

以上是Map/Reduce框架和streaming mapper/reducer之间的基本通讯协议。 工具

Hadoop Streaming用法 oop

Usage: $HADOOP_HOME/bin/hadoop jar \ code

$HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar [options] 进程

options: hadoop

(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:

参照:

http://dongxicheng.org/mapreduce/hadoop-streaming-programming/

相关文章
相关标签/搜索