hadoop 二次排序

来源:互联网 发布:苹果cms解析插件 编辑:程序博客网 时间:2024/05/06 14:49



  KeyFieldBasedPartitionerHadoop库中的一个实用Partitioner,配置相应的参数就可以使用,通过KeyFieldBasedPartitioner可以方便地实现二次排序。 

系统默认分隔符为\t,所以不需要重新定义,且shell不支持直接写\t,要用^I的形式,不然分隔符就真的是“\t”!!!

所以,如果\t分隔符不需要重新定义!!!!

   $HADOOP_HOME/bin/hadoop streaming \

       -D stream.map.output.field.separator=. \

       -D stream.num.map.output.key.fields=4 \

       -D map.output.key.field.separator=. \

       -D num.key.fields.for.partition=2 \

   -input /user/test/input -output /user/test/output \

   -mapper “mymapper.sh” -reducer “ myreducer.sh” \

-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \

-file /home/work/mymapper.sh \

-file /home/work/myreducer.sh \

-jobconf mapred.job.name=”key-partition-demo”

  其中-Dstream.map.output.field.separator=.-D stream.num.map.output.key.fields=4与上面的定制输出数据分隔方式意义相同,指定map的输出行第4个英文句号”.”之前为key,后面为value-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner指定使用KeyFieldBasedPartitioner-D map.output.key.field.separator=.指定key的内部用英文句号”.”分隔,-D num.key.fields.for.partition=2指定将key分隔出来的前两个部分而不是整个key用于Partitionerpartition



这里就是使用第一个+号来做key的分割,如果只有一个+符号就只能写1,有多个+才能用后面的来分割。不然就完全没用了!

      -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \      -jobconf map.output.key.field.separator='+' \      -jobconf num.key.fields.for.partition=1 \



0 0
原创粉丝点击