hadoop stream 使用心得
1.概述
Hadoop Streaming是 Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或脚本文件作为Mapper和 Reducer,例如:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input /user/test/input \
-output /user/test/output \
-mapper “myMapper.sh” \
-reducer “myReducer.sh”
-input等都为该命令的参数。
2. 原理
mapper 和 reducer 会从标准输入中读取用户数据,一行一行处理后发送给标准输出。 Streaming 工具会创建MapReduce 作业,发送给各个 tasktracker ,同时监控整个作业的执行过程。
如果一个可执行文件或者脚本作为 mapper , mapper 初始化时,每一个 mapper 任务会把该文件作为一个单独进程启动, mapper 任 务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。 同时, mapper 收集可执行文件进程标准输出的内容,并把收到的每一行内容转化成 key/value 对,作为mapper 的输出。 默认情况下,一行中第一个 tab 之前的部分作为 key ,之后的(不包括 tab )作为 value。 如果没有 tab ,整行作为 key 值, value 值为 null 。
对于 reducer,类似。
3.Streaming 命令说明
3.1Streaming 命令
使用下面的命令运行 Streaming MapReduce程序:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-stream.jar [args]
其中 args是 streaming参数,下面是参数列表 :
-input <path> :map输入数据的 hdfs路径; path可以是文件或者目录,可以使用 *通配符, -input选项可以使用多次指定多个文件或目录作为输入。
-output <path> :reduce输出结果的 hdfs路径; path必须不存在,而且执行作业的用户必须有创建该目录的权限, -output只能使用一次。
-mapper <filename> : mapper可执行文件或脚本;必须指定且唯一。
-reducer <filename> : reducer 可执行文件或脚本;必须指定且唯一。
-file <file> : 分发本地文件,先上传到 hdfs,然后再分发 到各个节点;
-cacheFIle <file>: 将 hdfs上的文件分发到各个节点;
-cachArchive <file> : 将 hdfs上的压缩文件分发到各个节点;
-numReduceTasks <num> : 系统中 reduce任务个数; 如果设置 -numReduceTasks 0或者 -reducer NONE则没有 reducer程序, mapper的输出直接作为整个 job的输出。
-D name=value : 配置系统参数;
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所占的域数目 -combiner<javaClass> : Combiner java类;对应的 Java类文件打包成 jar文件后用 -file分发。
-partitioner <javaClass> : Partitioner java类;
-inputformat <java class> : InputFormat java 类;用于读取输入数据,要实现 InputFormat接口。如果不指定,默认使用 TextInputFormat。
-outputformat <javaClass> : OutputFormat java 类;用于写入输出数据,要实现 OutputFormat接口。如果不指定,默认使用 TextOutputFormat。
-cmdenv NAME=VALUE:给 mapper和 reducer程序传递额外的环境变量, NAME是变量名, VALUE是变量值。
-verbose :指定输出详细信息,例如分发哪些文件,实际作业配置参数值等,可以用于调试
posted on 2014-05-24 16:40 berkeleysong 阅读(626) 评论(0) 编辑 收藏 举报