Hadoop Streaming

2018-09-21  本文已影响0人  大地瓜_

参考链接:https://zhuanlan.zhihu.com/p/34903460
https://blog.csdn.net/frankie110/article/details/38274965
https://www.cnblogs.com/duking1991/p/6077110.html

hadoop常用的参数总结

-D mapred.job.priority="NORMAL"

任务的优先级 `VERY_HIGH  HIGH    NORMAL     LOW    VERY_LOW`
-D mapred.job.name=jobname 指定作业名称
-D mapred.map.tasks=numofmap 每个Job运行map task的数量
-D mapred.reduce.tasks=numofreduce 每个Job运行reduce task的数量,
如果指定为 0,则意味着提交了一个map only的任务

分隔符参数设置

hadoop中的map-reduce是处理<key,value>这样的键值对,故指定<key,value>的分割符等参数可以分成三类:

1、map输出时分割符

2、分桶时的分隔符

3、reduce输出时的分割符

1. map输出时分割符 

参数: stream.map.output.field.separator 

作用: 指定map输出时的分割符 

stream.num.map.output.key.fields 

指定输出按照分隔符切割后,key所占有的列数 

(设置map程序分隔符的位置,该位置之前的部分作为key,之后的部分作为value)

Example

input数据:  2,2,c,c,c,c 

参数配置: 

-mapper "cat" # map 为分布式的cat命令 

-reducer ""  #reduce为空 / 

-jobconf stream.map.output.field.separator=','  / 

-jobconf stream.num.map.output.key.fields=2 / 

即按照','逗号分隔后,取前2列作为key 

output数据: 

2,2     c,c,c,c  #其中key为2,2  value为c,c,c,c 

2、分桶时的分隔符

map.output.key.field.separator 

指定map输出<key,value>对之后,其中key内部的分割符 

num.key.fields.for.partition 

指定分桶时,按照分隔符切割后,用于分桶key所占的列数 

Example

map的output数据: 2,2     c,c,c,c 

参数配置: 
-jobconf map.output.key.field.separator=',' / 
-jobconf num.key.fields.for.partition='1'   / 
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner / 

output数据: 

这样用于partition分桶的key就为:2 

注意,这里分桶不应该用默认的HashPartitioner 
-D num.key.fields.for.partition 

指定分桶时,key按照分隔符切割后,其中用于分桶key所占的列数(配合-partitionerorg.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner 使用)
  1. reduce输出时的分割符
这个与map类似,分别用于reduce输出时分隔符以及key占有的列数 

stream.reduce.output.field.separator 

stream.num.reduce.output.key.fields
上一篇下一篇

猜你喜欢

热点阅读