文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

hadoop如何自定义分区

2023-06-29 07:00

关注

今天小编给大家分享一下hadoop如何自定义分区的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

分区概念

分区这个词对很多同学来说并不陌生,比如Java很多中间件中,像kafka的分区,mysql的分区表等,分区存在的意义在于将数据按照业务规则进行合理的划分,方便后续对各个分区数据高效处理

Hadoop分区

hadoop中的分区,是把不同数据输出到不同reduceTask ,最终到输出不同文件中

hadoop 默认分区规则

以下是Partition 类中摘取出来的源码,还是很容易懂的

hadoop如何自定义分区

hash分区代码演示

下面是wordcount案例中的driver部分的代码,默认情况下我们不做任何设置,最终输出一个统计单词个数的txt文件,如果我们在这段代码中添加这样一行

hadoop如何自定义分区

再次运行下面的程序后,会出现什么结果呢?

public class DemoJobDriver {    public static void main(String[] args) throws Exception {        //1、获取job        Configuration configuration = new Configuration();        Job job = Job.getInstance(configuration);        //2、设置jar路径        job.setJarByClass(DemoJobDriver.class);        //3、关联mapper 和 Reducer        job.setMapperClass(DemoMapper.class);        job.setReducerClass(DemoReducer.class);        //4、设置 map输出的 key/val 的类型        job.setMapOutputKeyClass(Text.class);        job.setMapOutputValueClass(IntWritable.class);        //5、设置最终输出的key / val 类型        job.setOutputKeyClass(Text.class);        job.setOutputValueClass(IntWritable.class);        //6、设置最终的输出路径        String inputPath = "F:\\网盘\\csv\\hello.txt";        String outPath = "F:\\网盘\\csv\\wordcount\\hello_result.txt";        //设置输出文件为2个        job.setNumReduceTasks(2);        FileInputFormat.setInputPaths(job,new Path(inputPath));        FileOutputFormat.setOutputPath(job,new Path(outPath));        // 7 提交job        boolean result = job.waitForCompletion(true);        System.exit(result ? 0 : 1);    }}

hadoop如何自定义分区

可以看到,最终输出了2个统计结果文件,每个文件中的内容有所不同,这就是默认情况下,当reducer个数设置为多个时,会按照hash分区算法计算结果并输出到不同分区对应的文件中去

自定义分区步骤

业务需求

将下面文件中 的人物名称按照姓氏,“马”姓的放入第一个分区,“李”姓的放入第二个分区,其他的放到其他第三个分区中

hadoop如何自定义分区

自定义分区

import org.apache.commons.lang3.StringUtils;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.mapreduce.Partitioner;import org.apache.hadoop.io.Text;public class MyPartioner extends Partitioner<Text, IntWritable> {    @Override    public int getPartition(Text text, IntWritable intWritable, int partion) {        String key = text.toString();        if(StringUtils.isNotEmpty(key.trim())){            if(key.startsWith("马")){                partion = 0;            }else if(key.startsWith("李")){                partion = 1;            }else {                partion = 2;            }        }        return partion;    }}

将自定义分区关联到Driver类中,注意这里的ReduceTasks个数和自定义的分区数量保持一致

job.setNumReduceTasks(3);job.setPartitionerClass(MyPartioner.class);

下面运行Driver类,观察最终的输出结果,也是按照预期,将不同的姓氏数据输出到了不同的文件中

hadoop如何自定义分区

hadoop如何自定义分区

关于自定义分区的总结

以上就是“hadoop如何自定义分区”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯