Hadoop streaming脚本中约束关系参数详解

1 -D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \

2 -D stream.map.output.field.separator=, / # 指定mapper每条输出key,value分隔符

3 -D stream.num.map.output.key.fields=4 / #指定前四列为key,之后为value(所以在partition过程中,以前4个字段为key)

4 -D mapred.text.key.comparator.options="-k1,1 -k4,4" \

5 -D map.output.key.field.separator=, \#设置map输出中,Key内部的分隔符,为接下来reduce的分桶做准备

6 -D num.key.fields.for.partition=2 / #这里是指定按照前二列进行分桶(

事实上KeyFieldBasePartitioner还有一个高级参数mapred.text.key.partitioner.options,这个参数可以认为是num.key.fields.for.partition的升级版,它可以指定不仅限于key中的前几个字段用做partition,而是可以单独指定key中某个字段或者某几个字段一起做partition。)

注意mapred.text.key.partitioner.optionsnum.key.fields.for.partition不需要一起使用,一起使用则以num.key.fields.for.partition为准。 

7 -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner / #自己指定分桶规则时需要指定partitioner类

其中:

  • 1,2,3,4通常是一组,用来指定map输入时的key和按那几个key排序,个人理解,要按键排序时,必须要加上第一个参数,此外若要按key3排序,则fields至少等于3 ,此时若不指定分桶key,则以前三个fields为key进行分桶;    
  •  若要指定key的哪几个字段作为分桶的key,则再通过设置5,6,7是一组,用来指定map输出后用哪个key作为粪桶key(不好意思,是分桶!^_^)

(注意,这里有两个separator分隔符,第一个时map输出key_value的分隔符(map输出数据中的整体数据),第二个是map输出后指定的key内部的分隔符)

参考 https://blog.csdn.net/baidu_zhongce/article/details/49210787?utm_source=blogxgwz3

posted @ 2018-11-22 15:45  SteveSun  阅读(583)  评论(0编辑  收藏  举报