美文网首页我爱编程
Hadoop中的分区

Hadoop中的分区

作者: 扣篮的左手 | 来源:发表于2018-03-18 11:36 被阅读0次

在getPartition方法当中:
相同的key一定会得到相同的hashCode(),2147483647是Integer.MAX_VALUE,这是一个编程的技巧,规范。把得到的数与最大值相与,得到的数肯定为一个正值,这个时候再去对numReduceTasks取余,得到是哪个分区。取hashCode可以保证相同的key一定可以分到相同的分区里。

在运行的主类中,模板代码里,设置这个numReduceTasks,分区的个数。

        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        //设置ReduceTask个数为1,不写的情况下默认是1
        job.setNumReduceTasks(2);

        //设置Partition使用的是哪个类,默认的是HashPartitioner.class
        job.setPartitionerClass(ProvincePartitioner.class);

        //上边这两句要结合起来

如果默认的分区规则不满足我们的业务需求,重写分区规则。MR提供了相关的接口供我们去编写。写自己的类,实现Partitioner<K2, V2>,重点是分区的编号,即getPartition方法,返回的是int值。重写这个getPartition方法。

numReduceTasks指定是多少,就会生成多少个文件。只是多余的文件里没有内容。

6、关于reduceTask个数跟分区数的关系

reduceTask = 分区数    完美运行 
reduceTask > 分区数    完美运行 但是没有数据来到的分区 结果文件为空 浪费资源
reduceTask < 分区数    程序报错  Illegal partition 

hashCode是Object当中的方法,在字符串String类型中重写了hashCode方法

    public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

为什么在String中重写的hashCode方法选择了乘以31,因为31计算起来方便,
而且31是一个质数。

相关文章

  • Hadoop中的分区

    在getPartition方法当中:相同的key一定会得到相同的hashCode(),2147483647是Int...

  • Flink 的 HDFS Connector

    这个Connector提供了一个sink来写分区文件到任何Hadoop FileSystem支持的任何文件系统中,...

  • Hive(二) 分区表、桶

    分区表 Hive中没有复杂的分区类型(List,Range,Hash)、各种复合分区,分区列不是表中的实际字段而是...

  • Spark中repartition和coalesce的用法

    在Spark的Rdd中,Rdd是分区的。 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多...

  • hadoop 3.2.1无法在WIN10上运行

    1.不说了,上代码.先是POM , 我这是 hadoop3.2.1的 2.这是Map任务 按数字大小分区 ,原本是...

  • 主分区和逻辑驱动盘

    1. 主分区,也称为主磁盘分区,和扩展分区、逻辑分区一样,是一种分区类型。主分区中不能再划分其他类型的分区,因此每...

  • Flink的八种分区策略源码解读

    Flink包含8中分区策略,这8中分区策略(分区器)分别如下面所示,本文将从源码的角度一一解读每个分区器的实现方式...

  • 系统安装的预备知识

    1. 主分区和逻辑分区 「主分区」和「逻辑分区」的概念的区别,以及「扩展分区」概念的引出,都是历史发展过程中的产物...

  • centos7根目录空间扩容

    1 查看目前分区状况 2 新增分区,选择primary分区 3 刷新分区 4 将新分区加入vg中 5 扩展根卷lv...

  • mysql分区

    mysql分区 Mysql支持水平分区,并不支持垂直分区;水平分区:指将同一表中不同行的记录分配到不同的物理文件中...

网友评论

    本文标题:Hadoop中的分区

    本文链接:https://www.haomeiwen.com/subject/zbheqftx.html