zoukankan      html  css  js  c++  java
  • hadoop 指定 key value分隔符

    原文:http://wingmzy.iteye.com/blog/1260570

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

    map输出时分割符 

    分桶时的分隔符 

    reduce输出时的分割符 



    下面分别叙述: 

    1. map输出时分割符 

    参数: 

    stream.map.output.field.separator 

    作用: 

    指定map输出时的分割符 

    stream.num.map.output.key.fields 

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



    举例: 

    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所占的列数 



    举例: 

    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 



    3. reduce输出时的分割符 

    这个与map类似,分别用于reduce输出时分隔符以及key占有的列数 

    stream.reduce.output.field.separator 

    stream.num.reduce.output.key.fields

    也可以通过代码实现,如下

    mapreduce 默认情况下 key/value 分隔符为:“ ”
    测试的输出如下:

    我们可以在代码中进行设置来自定义 key/value 输出分隔符:在代码中添加如下一行代码:

    conf.set("mapred.textoutputformat.separator", ";"); //此处以”;“作为分割符,后边介绍为什么这么修改

    修改代码后,测试修改结果:

     
     

    修改原因:
    我们checkout   hadoop-1.2.1版本
    打开文件:TextOutputFormat.java

     
     

    我们可以看到如下一行代码:
        String keyValueSeparator= conf.get("mapred.textoutputformat.separator",
                                           " ");
       代码的意思是:读取设置的key/value输出分隔符,如果没有读取到,默认使用 " "
       所以我们就在任务执行前设置名称为:mapred.textoutputformat.separator 的自定义值 即可

  • 相关阅读:
    js看懂funid与funname各自的作用以及回显示是怎么找到对应位置的
    居然脑海中还记得03年的瑞星升级ID号
    [恢]hdu 2186
    [恢]hdu 2109
    [恢]hdu 2140
    [恢]hdu 2160
    [恢]hdu 2101
    [恢]hdu 2162
    [恢]hdu 2201
    [恢]hdu 2163
  • 原文地址:https://www.cnblogs.com/duking1991/p/6077110.html
Copyright © 2011-2022 走看看