zoukankan      html  css  js  c++  java
  • hadoop streaming怎么设置key

    充分利用hadoop的map输出自动排序功能,能够有效提高计算效率。
    Hadoop streaming框架默认情况下会以'/t’作为分隔符,将每行第一个'/t’之前的部分作为key,其余内容作为value,如果没有'/t’分隔符,则整行作为key;这个key/tvalue对又作为该map对应的reduce的输入。
    实际上,通过设置参数,可以根据需要将约定满足要求的数据分布到同一个reducer,又可以通过设置map执行参数将数据内容进行一定的排序,从而提高在reducer中的计算效率。

    hadoop 中可以提供配置供用户自主设置的分隔符:
    -D stream.map.output.field.separator :设置map输出中key和value的分隔符
    -D stream.num.map.output.key.fields : 设置map程序分隔符的位置,该位置之前的部分作为key,之后的部分作为value
    -D map.output.key.field.separator : 设置map输出中key内部的分割符——备注:基于该分隔符,shuffle对key数值进行排序
    -D num.key.fields.for.partition : 指定分桶时,key按照分隔符切割后,其中用于分桶key所占的列数(配合-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner 使用)
    -D stream.reduce.output.field.separator:设置reduce输出中key和value的分隔符
    -D stream.num.reduce.output.key.fields:设置reduce程序分隔符的位置

    比如下面的输入数据例子,想要基于前两个数值进行hash分桶,将数据分布到同一个reducer,另一方面又想将前四个数字进行排序。需要这样设置:
    -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

    1 1,2,1,1,1  
    2 1,2,2,1,1  
    3 1,3,1,1,1  
    4 1,3,2,1,1  
    5 1,3,3,1,1  
    6 1,2,3,1,1  
    7 1,3,1,1,1  
    8 1,3,2,1,1  
    9 1,3,3,1,1 
  • 相关阅读:
    我与solr(二)--导入mysql数据库
    Android 渐变效果
    希尔排序
    插入排序
    选择排序
    冒泡排序法
    QT仿QQ页面
    Colliding Mice
    QTablewidget通过代理实现限制输入
    QT绘制心形图案二
  • 原文地址:https://www.cnblogs.com/fisherinbox/p/7289712.html
Copyright © 2011-2022 走看看