什么是Hadoop Streaming
?
?
Hadoop提供的一个编程工具,允许用户使用任何可执行文件或脚本作为mapper和Reducer
?
?
比如shell中的cat作为mapper,wc作为reducer
?
?
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar -input myInputDirs -output myOutputDir -mapper cat -reducer wc |
找到Hadoop Streaming所在的包 定义输入输出路径 定义mapper和reducer |
?
?
Hadoop Streaming编程原理
?
?
mapper和reducer会从标准输入中读取用户数据,一行一行处理后发送给标准输出,Streaming工具会创建MapReduce job,发送给各个taskTracker,同时监控整个job的执行过程
?
?
如果一个文件(可执行文件或者脚本)作为mapper,mapper初始化时,每一个mapper任务会把文件作为一个单独的进程启动
?
?
mapper任务运行时,把输入切分成行,然后把每一行提供给可执行文件进程的标准输入。同时mapper收集可执行文件进程的标准输出内容,并把收到的每一行内容转化为key/value对作为mapper的输出。
?
?
默认情况下,一行的第一个tab之前的作为key,后面的作为value
?
?
如果没有tab,整行作为key,value为空
?
?
用法
?
?
Hadoop jar + Hadoop Streaming jar + option
?
?
option有:
?
?
-input
-output
-mapper
-reducer
-file:打包文件到提交的作业中,可以使mapper或者reducer要用的输入文件,如配置文件,字典等
-partitioner
-combiner
-D:作业的一些属性,以前用的是-jobconf
?
?
mapred.map.tasks:map task的数目
mapred.reduce.tasks
stream.map.input.field.separator/stream.map.output.field.separator:map输入输出的分隔符,默认为\t
?
?
本地测试:
?
?
cat input.txt|python Mapper.py|sort|python Reducer.py
?
?
或者
?
?
cat input.txt|./Mapper|sort|./Reducer
?
?
摘自
?
?
http://dongxicheng.org/mapreduce/hadoop-streaming-programming/
?
?
里面还有wordcount Hadoop Streaming的Python版实现和shell版实现