返回顶部
首页 > 资讯 > 精选 >hadoop如何自定义分区
  • 477
分享到

hadoop如何自定义分区

2023-06-29 07:06:55 477人浏览 八月长安
摘要

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

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

分区概念

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

Hadoop分区

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

hadoop 默认分区规则

  • hash分区

  • 按照key的hashCode % reduceTask 数量 = 分区号

  • 默认reduceTask 数量为1,当然也可以在driver 端设置

以下是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分区算法计算结果并输出到不同分区对应的文件中去

自定义分区步骤

  • 自定义类继承Partitioner

  • 重写getPartition方法,并在此方法中根据业务规则控制不同的数据进入到不同分区

  • 在Job的驱动类中,设置自定义的Partitioner类

  • 自定义Partition后,要根据自定义的Partition逻辑设置相应数量的ReduceTask

业务需求

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

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如何自定义分区

关于自定义分区的总结

  • 如果ReduceTask的数量 > 自定义partion中的分区数量,则会多产生几个空的输出文件

  • 如果 1 < ReduceTask < 自定义partion中的分区数量,有一部分的数据处理过程中无法找到相应的分区文件存储,会抛异常

  • 如果ReduceTask = 1 ,则不管自定义的partion中分区数量为多少个,最终结果都只会交给这一个ReduceTask 处理,最终只会产生一个结果文件

  • 分区号必须从0开始,逐一累加

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

--结束END--

本文标题: hadoop如何自定义分区

本文链接: https://lsjlt.com/news/323200.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • hadoop如何自定义分区
    今天小编给大家分享一下hadoop如何自定义分区的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。分区概念分区这个词对很多同学来...
    99+
    2023-06-29
  • hadoop中mapreducez如何自定义分区
    这篇文章主要为大家展示了“hadoop中mapreducez如何自定义分区”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“hadoop中mapreducez如何自定义分区”这篇文章吧。packag...
    99+
    2023-06-02
  • hadoop全面解读自定义分区
    分区概念 分区这个词对很多同学来说并不陌生,比如Java很多中间件中,像kafka的分区,mysql的分区表等,分区存在的意义在于将数据按照业务规则进行合理的划分,方便后续对各个分区...
    99+
    2024-04-02
  • hadoop如何自定义格式化输出
    这篇文章给大家分享的是有关hadoop如何自定义格式化输出的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。import java.io.IOException;import java.net.U...
    99+
    2023-06-02
  • hadoop如何自定义GroupComparator实现求最大值
    小编给大家分享一下hadoop如何自定义GroupComparator实现求最大值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!import java....
    99+
    2023-06-02
  • 「 Hadoop」mapreduce对温度数据进行自定义排序、分组、分区等 【转载】
    原帖地址:http://www.ptbird.cn/mapreduce-tempreture.html 「 Hadoop」mapreduce对温度数据进行自定义排序、分组、分区等   一、需求说明 1、数据文件说明 hdfs...
    99+
    2017-04-10
    Hadoop」mapreduce对温度数据进行自定义排序 分组 分区等 【转载】
  • 怎么自定义JDBCRDD的分区
    这篇文章主要讲解了“怎么自定义JDBCRDD的分区”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么自定义JDBCRDD的分区”吧!1,JDBCRDD使用val data = new Jdb...
    99+
    2023-06-19
  • 如何用 Golang 创建自定义时区?
    要在 golang 中创建自定义时区,可以使用 time.fixedzone 函数或 time.newfixedzone 函数。time.fixedzone 函数用于修改时区偏移,而 t...
    99+
    2024-05-22
    golang 时区 标准库
  • JavaScript如何自定义分页样式
    小编给大家分享一下JavaScript如何自定义分页样式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!html部分<div...
    99+
    2024-04-02
  • Angular2如何自定义分页组件
    这篇文章主要介绍了Angular2如何自定义分页组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在项目中,前端传给后台的参数有:pageS...
    99+
    2024-04-02
  • Android如何自定义评分控件
    今天小编给大家分享一下Android如何自定义评分控件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。自定义参数为了方便扩展,...
    99+
    2023-06-30
  • Hadoop中怎么自定义输出排序
    本篇文章为大家展示了Hadoop中怎么自定义输出排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。package com.hgs;import java.io.DataInput...
    99+
    2023-06-02
  • js+css如何自定义分页效果
    这篇文章给大家分享的是有关js+css如何自定义分页效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。网上看了好多分页插件都不太满意,所以根据网上的一些东西自己做了一个,可以搭配...
    99+
    2024-04-02
  • angularjs+bootstrap如何实现自定义分页
    这篇文章主要介绍angularjs+bootstrap如何实现自定义分页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!目前在做一个java web页面,没有使用到框架的分页,所以需要...
    99+
    2024-04-02
  • win10自定义分辨率如何设置
    这篇文章主要讲解了“win10自定义分辨率如何设置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win10自定义分辨率如何设置”吧!win10自定义分辨率设置方法:在右下角的搜索中输入控制面...
    99+
    2023-07-01
  • AntDesignVuetable组件如何自定义分页器
    目录Ant Design Vue table组件自定义分页器使用Ant Design Vue的Table组件,解决点击任意内容详情,点击返回分页器页数默认回到第一页问题描述解决方法总...
    99+
    2023-05-16
    Ant Design Vue Ant Design Vue table组件 table组件自定义分页器
  • ubuntu21.04系统怎么自定义分区安装?
    今天要在自己的一台笔记本电脑中安装最新的ubuntu21.04系统,但是这台电脑已经有其它操作系统以及文件,所以想选择个自定义的空闲的分区进行安装,这样就不用把文件拷贝出来了,该怎么实现呢?下面我们就拉看看详细的教程。 首先...
    99+
    2022-05-23
    ubuntu21.04 自定义分区 ubuntu安装
  • db2 定义分区表和分区键
    下面,为了提高数据库性能,我们将不同的分区放到不同的表空间下。首先创建6个表空间,3个数据表空间,3个索引表空间:db2 "create tablespace ts_dat managed by ...
    99+
    2024-04-02
  • Django自定义分页
    自定义分页 稳扎稳打版 def book(request): # 从URL取参数(访问的页码) page_num = request.GET.get("page") try: # 将取出的p...
    99+
    2023-01-30
    分页 自定义 Django
  • Angular2如何自定义validators
    这篇文章主要介绍了Angular2如何自定义validators,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。angular 当需要form...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作