参考链接: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 使用)
- reduce输出时的分割符
这个与map类似,分别用于reduce输出时分隔符以及key占有的列数
stream.reduce.output.field.separator
stream.num.reduce.output.key.fields
网友评论