• 大数据学习之提交job流程,分区和合并11


    一:分区

    1:自定义一个Partition类(直接使用上次那个流量统计那个代码

    package it.dawn.YARNPra.flow流量汇总序列化.partition;
    
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Partitioner;
    
    
    /**
     * @author Dawn
     * @date 2019年5月3日22:03:08
     * @version 1.0
     * 自定义一个分区
     */
    public class PhonenumPartitioner extends Partitioner<Text, FlowBean>{
    
    	//根据手机号前三位进行分区
    	@Override
    	public int getPartition(Text key, FlowBean value, int numpartitions) {
    		//1.获取手机号前三位
    		String phoneNum=key.toString().substring(0, 3);
    		//2:分区
    		int partitioner=4;
    		
    		if("135".equals(phoneNum)) {
    			return 0;
    		}else if("137".equals(phoneNum)){
    			return 1;
    		}else if("138".equals(phoneNum)) {
    			return 2;
    		}else if("139".equals(phoneNum)) {
    			return 3;
    		}
    		
    		return partitioner;
    	}
    
    }
    

      

    2:在Driver类中添加Partiton的分区个数

    3:运行结果

     

    一:合并mapTask的合并)

    原理图:

    1maptask并行度与决定机制

    2 maptask工作机制

    3:运用场景

    1:多个小文件合并优化(减少mapTask任务)

    2:Combiner 合并(使用上回的wordcount程序)

    父类Reducer

    局部汇总 ,减少网络传输量 ,进而优化程序。

    注意:求平均值?

    3  5  7  2  6

    mapper: (3 + 5 + 7)/3 = 5

    (2 + 6)/2 = 4

    reducer:(5+4)/2

    前提: 只能应用在不影响最终业务逻辑的情况下

    使用:只需添加一行代码即可

    //添加combiner

    job.setCombinerClass(WordCountReducer.class);

  • 相关阅读:
    在windows下安装mongodb(1)
    kettle过滤记录运用
    Robberies(简单的01背包 HDU2955)
    Alice and Bob(贪心HDU 4268)
    A Simple Problem with Integers(树状数组HDU4267)
    A Round Peg in a Ground Hole(凸包应用POJ 1584)
    Fishnet(暴力POJ 1408)
    Wall(凸包POJ 1113)
    Pipe(点积叉积的应用POJ1039)
    I love sneakers!(分组背包HDU3033)
  • 原文地址:https://www.cnblogs.com/hidamowang/p/10807118.html
Copyright © 2020-2023  润新知