zoukankan      html  css  js  c++  java
  • 大数据学习之提交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);

  • 相关阅读:
    为自己的开篇
    软考程序员笔记
    centos php7 安装mysqli扩展心得
    php判断访问协议是否是https
    go语言新建多维map集合
    获取contenteditable区域光标所在位置信息
    ckeditor中 config.js等通过ckeditor.js引入文件手动修改方法
    Vue使用——v-for循环里面使用v-if判断显示数据
    数据库关联字段设置
    Spring Jpa 自动建表——时间字段设置
  • 原文地址:https://www.cnblogs.com/hidamowang/p/10807118.html
Copyright © 2011-2022 走看看