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编辑  收藏  举报

导航