【API篇】四、物理分区算子API

news2024/11/24 13:36:02

文章目录

  • 1、 分区算子:随机分区
  • 2、分区算子:轮询分区
  • 3、分区算子:重缩放分区
  • 4、分区算子:广播
  • 5、分区算子:全局分区
  • 6、自定义分区

重分区,即数据"洗牌",将数据分配到下游算子的并行子任务中。常见的分区策略有:

  • 随机分区
  • 轮询分区
  • 重缩放分区
  • 广播
  • 全局分区
  • 自定义分区

1、 分区算子:随机分区

调用DataStream的.shuffle()方法,将数据随机地分配到下游算子的并行任务中去。

在这里插入图片描述

demo代码:socket模拟无界流,设置并行度为2,读入数据后接shuffle,再打印

public class ShuffleExample {

    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

		 env.setParallelism(2);

        DataStreamSource<Integer> stream = env.socketTextStream("node01", 9527);

        stream.shuffle().print()

        env.execute();
    }
}

可以看到,数据流经过shuffle重分区后,到输出算子的哪个子任务是随机的:

在这里插入图片描述

2、分区算子:轮询分区

用DataStream的.rebalance()方法,rebalance使用的是Round-Robin负载均衡算法,就像发牌,将输入流数据平均分配到下游的并行任务中去。

在这里插入图片描述

stream.rebalance().下游算子....

3、分区算子:重缩放分区

和轮询相似,不同的是,重缩放是局部轮询,只给和它组队的分区轮询数据,而不是给所有分区。(调用rescale方法时,其实底层也是使用Round-Robin算法进行轮询)

在这里插入图片描述

stream.rescale().下游算子...

4、分区算子:广播

通常,一条数据去往一个子任务去处理即可,但广播就是:调用DataStream的broadcast()方法,将输入数据复制并发送到下游算子的所有并行任务中去

stream.broadcast().print();

在这里插入图片描述

5、分区算子:全局分区

极端的分区方式,会将数据流中的数据全都发送到下游算子的第一个子任务中去, 相当于强行让下游任务并行度变成了1(注意是相当于,不是真把下游算子并行度改成1了,只是不往其他子任务发数据了,其他有跟没有一样了)

stream.global().print();

发送数据:

在这里插入图片描述

效果:

在这里插入图片描述

6、自定义分区

以上的Flink分区策略都不满足需求时,可自定义分区策略,首先实现Partitioner接口,自定义分区器:

public class MyPartitioner implements Partitioner<String> {

    @Override
    public int partition(String key, int numPartitions) {
        return Integer.parseInt(key) % numPartitions;
    }
}

//numPartitions 下游算子并行度
//这里的分区策略,简单写个key除以算子并行度取余
//该方法返回的是分区索引

使用自定义分区器:

public class PartitionCustomDemo {
    public static void main(String[] args) throws Exception {
    
        StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());

        env.setParallelism(2);

        DataStreamSource<String> socketDS = env.socketTextStream("node01", 9527);

        DataStream<String> myDS = socketDS
                .partitionCustom(
                        new MyPartitioner(),
                        value -> value);
                

        myDS.print();

        env.execute();
    }
}

  • 自定义分区用的api是partitionCustom
  • partitionCustom方法第一个参数是自定义的分区器对象
  • 第二个参数是key的选择器对象KeySelector,和keyBy方法一样,value -> value即以输入数据为key

到此,就实现了数据往下游算子的子任务分配时,按什么规则来分。以上就是Flink的常用分区策略,此外,还有一种one-to-one的分区器,带上自定义分区器,共8种:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【日志与守护进程】

文章目录 1 :peach:日志:peach:1.1 :apple:对日志的基本理解:apple:1.2 :apple:对日志系统代码的基本编写:apple:1.2.1 :lemon:messageLog.hpp:lemon:1.2.2 :lemon:tcpServer:lemon: 1.3 :lemon:验证:lemon: 2 :peach:守护进程:peach:2.1 :apple:进程组与会话:apple:2.2 :apple…

Rabbitmq 的管理配置

1、Rabbitmq管理 1.1、多租户与权限 每一个RabbitMQ 服务器都能创建虚拟的消息服务器&#xff0c;我们称之为虚拟主机(virtual host) ,简称为vhost 。每一个vhost 本质上是一个独立的小型RabbitMQ 服务器&#xff0c;拥有自己独立的队列、交换器及绑定关系等&#xff0c;井且它…

用PHP爬取视频代码示例详细教程

以下是一个使用Symfony Panther和PHP进行爬虫的示例程序&#xff0c;用于爬虫企鹅上的视频。请注意&#xff0c;这个示例需要使用https://www.duoip.cn/get_proxy这段代码获取爬虫IP。 <?php // 引入所需的库 require vendor/autoload.php;use Symfony\Component\Panther\P…

多媒体应用设计师 第7章 多媒体数字压缩编码技术基础

1.多媒体数据压缩技术理论基础及压缩编码方法分类 必要性:大数据量的图像信息会给存储器的存储容量&#xff0c;通信线路的带宽&#xff0c;以及计算机的处理速度增加极大压力。如果没有多媒体编码压缩技术的发展&#xff0c;大容量图像&#xff0c;视频信息的存储和传输就难以…

林旅强 | AI+开源时代 - 开发者与治理者的机遇与挑战

点击以下链接收听本期 “大咖访谈” 播客&#xff0c;与大咖面对面&#xff1a; 大咖访谈链接&#xff1a;EP15&#xff1a;林旅强 | AI开源时代 - 开发者与治理者的机遇与挑战 刘天栋&#xff1a;访谈主持&#xff0c;开源雨林顾问&#xff0c;开源社联合创始人&#xff0c;Ap…

人工智能应该怎么学?

人工智能这个词炙手可热&#xff0c;为了跟上时代的步伐&#xff0c;有许多小伙伴就想学习人工智能&#xff0c;今天来介绍一下人工智能究竟是什么&#xff1f;应该怎么学&#xff1f;怎么入门&#xff1f; 首先来看一下什么是人工智能&#xff1f; 人工智能 人工智能 人工智能…

puppeteer学习笔记

目录 介绍启动方法功能一、爬虫优势如何实现爬虫小demo 功能二、执行脚本百度搜索脚本demo 功能三、获取cookie&#xff08;这个只能是模拟浏览器当前进入网页的cookie不是平时用的下载的的浏览器的cookie&#xff09;功能四、监控网页&#xff0c;进行性能分析 介绍 puppetee…

文旅部发布《旅游电子合同管理与服务规范》,推动旅游企业转型升级

日前&#xff0c;文化和旅游部批准发布了旅游电子合同领域的行业标准《旅游电子合同管理与服务规范》&#xff08;以下简称《标准》&#xff09;&#xff0c;将于2023年12月9日起实施。 《标准》聚焦旅游电子合同的适用范围、基本要素、操作规范、载体要求、安全保密等方面进…

【编译原理】对++*p++操作理解

目录 1. 代码段执行结果 2. *p的结合过程 3. 通过汇编代码判断执行结果 1. 代码段执行结果 对于以下代码&#xff1a; int main() { int i 0;int *p &i; *p ; return i; }输出结果为&#xff1a; ASM generation compiler returned: 0 Execution build compiler re…

隐写术--python隐写

0x00 背景 何为隐写术&#xff1f; 隐写术是一类可以隐藏自己写的一些东西的方法&#xff0c;是一门关于信息隐藏的技巧与科学。指的是采取一些不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容的方法。 可参考 一文让你完全弄懂Stegosaurus - 知乎 本文要…

机械设计中的结构要素、基本要求和准则

机械结构设计的任务是依据设计任务在总体设计构想的基础上&#xff0c;确定的原理方案&#xff0c;绘制出具体的结构图&#xff0c;以实现设计所要求的功能。设计的过程是将抽象的工作原理具体化为某类构件或零部件&#xff0c;包含确定结构件的材料、形状、尺寸、公差、热处理…

机器学习绪论

目录 第1关&#xff1a;什么是机器学习 相关知识 题目答案 第2关&#xff1a;机器学习的常见术语 相关知识 假设空间 归纳偏好 题目答案 第3关&#xff1a;机器学习的主要任务 相关知识 分类 回归 聚类 题目答案 第1关&#xff1a;什么是机器学习 相关知识 相信…

给你一个文件夹,统计其下面的文件数量,包括子文件夹下面的文件

对于统计一个文件夹下面的文件的数量&#xff0c;大家第一反应肯定是递归调用来实现&#xff0c;现在有这么一个目录结构&#xff1a;root1和root2下面各有一个文件file1.txt和file2.txt&#xff0c;所以最终统计出来的文件数量应该是3 我们先看看递归实现&#xff1a; public …

Plant Commun | 正交组、系统转录组和CUT-Tag发掘植物保守冷响应因子BBX29及其靶基因

植物以固着的方式生活&#xff0c;但它们并不完全被动&#xff0c;许多温带植物通过预暴露于非冻结低温来增加它们的抗冻性&#xff0c;这种适应性过程被称为冷驯化(CA)。越来越多的证据表明&#xff0c;低温下的许多生理和代谢变化是由于CA诱导的冷反应(COR)基因的表达。C-重复…

Android 远程调用服务之 AIDL

目录 一、AIDL 是什么&#xff1f;二、为什么要使用 AIDL&#xff1f; 1、使用 AIDL 是为了跨进程调用第三方服务&#xff1f; 2、使用 AIDL 是为了向第三方服务传输数据/参数&#xff1f; 3、使用 AIDL 是为了获取第三方服务直接或者异步返回的数据&#xff1f;三…

Linux性能优化--性能工具:磁盘I/O

6.0 概述 本章介绍的性能工具能帮助你评估磁盘I/O子系统的使用情况。这些工具可以展示哪些磁盘或分区已被使用&#xff0c;每个磁盘处理了多少I/O,发给这些磁盘的I/O请求要等多久才被处理。 阅读本章后&#xff0c;你将能够&#xff1a; 确定系统内磁盘I/O的总量和类型(读/写…

浅谈智能照明控制系统应用在城市轨道交通

叶根胜 江苏安科瑞电器制造有限公司 江苏江阴 214405 摘要&#xff1a;在传统的城市轨道交通设计方面&#xff0c;照明设计方案具有一定的弊端。随着计算机技术的发展&#xff0c;智能化技术渐渐步入人们的生活并成为主流&#xff0c;故在城市轨道交通中应用新型的照明控制设…

基于关联规则的多样化推荐技术应用研究

摘要 目录 第二章 相关理论介绍 2.2.1 当前常用推荐技术 关联规则推荐 2.3.1 关联规则相关概念