标签:
什么是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所在的包 |
? ?
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版实现
标签:
原文地址:http://www.cnblogs.com/keedor/p/4391026.html