1.常用Streaming命令介绍
使用下面的命令运行Streaming MapReduce程序:
1:
$HADOOP_HOME/bin/hadoop/hadoop streaming args
其中args是streaming参数,下面是参数列表:
2.命令参数详解
下面是对各个参数的详细说明:
l -input <path>:指定作业输入,path可以是文件或者目录,可以使用*通配符,-input选项可以使用多次指定多个文件或目录作为输入。
l -output <path>:指定作业输出目录,path必须不存在,而且执行作业的用户必须有创建该目录的权限,-output只能使用一次。
l -mapper:指定mapper可执行程序或Java类,必须指定且唯一。
l -reducer:指定reducer可执行程序或Java类,必须指定且唯一。
l -numReduceTasks:指定reducer的个数,如果设置-numReduceTasks 0或者-reducer NONE则没有reducer程序,mapper的输出直接作为整个作业的输出。
l -jobconf | -D NAME=VALUE:指定作业参数,NAME是参数名,VALUE是参数值,可以指定的参数参考hadoop-default.xml。特别建议用-jobconf mapred.job.name='My Job Name'设置作业名,使用-jobconf mapred.job.priority=VERY_HIGH | HIGH | NORMAL | LOW | VERY_LOW设置作业优先级,使用-jobconf mapred.job.map.capacity=M设置同时最多运行M个map任务,使用-jobconf mapred.job.reduce.capacity=N设置同时最多运行N个reduce任务。常见的作业配置参数如下表所示:
l -combiner:指定combiner Java类,对应的Java类文件打包成jar文件后用-file分发。
l -partitioner:指定partitioner Java类,Streaming提供了一些实用的partitioner实现,参考
KeyBasedFiledPartitoner
和
IntHashPartitioner
。
l -inputformat, -outputformat:指定inputformat和outputformat Java类,用于读取输入数据和写入输出数据,分别要实现InputFormat和OutputFormat接口。如果不指定,默认使用TextInputFormat和TextOutputFormat。
l -cmdenv NAME=VALUE:给mapper和reducer程序传递额外的环境变量,NAME是变量名,VALUE是变量值。
l -mapdebug, -reducedebug:分别指定mapper和reducer程序失败时运行的debug程序。
l -verbose:指定输出详细信息,例如分发哪些文件,实际作业配置参数值等,可以用于调试。
3.Streaming使用示例
1:
# 删除原目录 由于streaming必须确保输出路径不存在
2:
$hadoop fs -rmr
"$outpath"
3:
4:
# 执行统计
5:
$hadoop streaming \
6:
-input
"$inpath"
\
# 文件输入路径
7:
-output
"$outpath"
\
# 结果输出路径
8:
-mapper
"$map"
\
# map阶段所用脚步
9:
-reducer
"$reduce"
\
# reduce阶段所用脚本
10:
-file
"$map"
\
# 将客户端本地分拣分发到计算节点
11:
-file
"$reduce"
\
12:
-jobconf mapred.job.name=
"test_task"
\
# 任务名称
13:
-jobconf stream.num.map.output.key.fields=1 \
14:
-jobconf mapred.job.priority=HIGH \
# 作业优先级
15:
-jobconf mapred.job.map.capacity=100 \
# 同时运行的map数
16:
-jobconf mapred.job.reduce.capacity=10 \
# 同时运行的reduce数
17:
-jobconf mapred.map.tasks=2000 \
# map的个数
18:
-jobconf mapred.reduce.tasks=10
# reduce的格式
19:
20:
exit $?