spark shuffle写操作——BypassMergeSortShuffleWriter

创建分区文件writer

每一个分区都生成一个临时文件,创建DiskBlockObjectWriter对象,放入partitionWriters
image.png

分区writer写入消息

遍历所有消息,每一条消息都使用分区器选择对应分区的writer然后写入
image.png

生成分区文件

将分区writer的数据flush,每个分区生成一个FlieSegment,保存在partitionWriterSegments
image.png

分区writer的commit

可以看到生成的fileSegment中file还是上面的分区临时文件
image.png

合并分区临时文件

遍历分区临时文件,获取对应的合并writer,将临时文件的数据写入到合并writer中
image.png
image.png

获取合并的writer

生成一个临时文件,多个reducer使用同一个临时文件。
每个分区都会生成一个LocalDiskShufflePartitionWriter
image.png
LocalDiskShufflePartitionWriter类核心方法有两个openStream、openChannelWrapper。
两个方法分别调用对应的init方法,返回PartitionWriterStream的stream对象和PartitionWriterChannel的channel对象。
PartitionWriterStream的write方法中使用outputBufferedFileStream,在initStream中可以看到outputBufferedFileStream使用的上面生成的临时文件outputTempFile。
PartitionWriterChannel的channel方法返回的是outputFileChannel,outputFileChannel在initChannel中使用的也是上面生成的临时文件outputTempFile。
这表明无论使用stream还是channel,最后都是写入临时文件outputTempFile中。
image.png
image.png
image.png
image.png

临时文件数据写入合并writer

writePartitionedDataWithChannel是使用channel的方式,调用copyFileStreamNIO
writePartitionedDataWithStream是使用stream的方式,调用copyStream
image.png
copyFileStreamNIO
可以看到使用了transferTo方法(零拷贝)
image.png
copyStream
先判断是否能使用transferTo,能的话就调copyFileStreamNIO用零拷贝的方式,不行的话就走普通的流复制
image.png

最终的分区文件提交

将最终的分区临时文件提交,生成对应的data文件和index文件。
可以看到是调用的IndexShuffleBlockResolver类的writeIndexFileAndCommit方法。
image.png
image.png

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

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

相关文章

从海上长城到数字防线:视频技术在海域边防现代化中的创新应用

随着全球化和科技发展的加速,海域安全问题日益凸显其重要性。海域边防作为国家安全的第一道防线,其监控和管理面临着诸多挑战。近年来,视频技术的快速发展为海域边防场景提供了新的解决方案,其高效、实时、远程的监控特点极大地提…

如何快速开展每日待办工作 待办任务高效管理

每天,我们都需要处理大量的待办工作,如何高效有序地开展这些工作成为了我们必须要面对的问题。仅仅依靠个人的记忆和脑力去管理这些繁杂的事务,显然是一项艰巨的挑战。在这个时候,如果能有一款实用的待办工具来辅助我们&#xff0…

如何使用C++调用Pytorch模型进行推理测试:使用libtorch库

如何使用C调用Pytorch模型进行推理测试:使用libtorch库 目录 如何使用C调用Pytorch模型进行推理测试:使用libtorch库一、环境准备1,linux:以ubuntu 22.04系统为例1. 准备CUDA和CUDNN2. 准备C环境3, 下载libtorch文件4, 编写测试li…

期权学习必看圣书:《3小时快学期权》要在哪里看?

今天带你了解期权学习必看圣书:《3小时快学期权》要在哪里看?《3小时快学期权》是一本关于股票期权基础知识的书籍。 它旨在通过简明、易懂的语言和实用的案例,让读者在短时间内掌握股票期权的基本概念、操作方法和投资策略。通过这本书&…

Linux系统(CentOS)安装Mysql5.7.x

安装准备: Linux系统(CentOS)添加防火墙、iptables的安装和配置 请访问地址:https://blog.csdn.net/esqabc/article/details/140209894 1,下载mysql安装文件(mysql-5.7.44为例) 选择Linux通用版本64位(L…

算力互联网网络架构;SRV6;智享WAN

目录 算力互联网网络架构 SRV6 主要特点 应用场景 结论 G-SRV6 多层次网络切片 智享WAN 一、定义与背景 二、关键技术 三、应用场景与优势 四、发展现状与未来展望 智能算力网络成为智能经济时代代表性数字基础设施 算力互联网网络架构 为构建算力互联网这个前瞻性…

后端之路——阿里云OSS云存储

一、何为阿里云OSS 全名叫“阿里云对象存储OSS”,就是云存储,前端发文件到服务器,服务器不用再存到本地磁盘,可以直接传给“阿里云OSS”,存在网上。 二、怎么用 大体逻辑: 细分的话就是: 1、准…

JavaSE (Java基础):面向对象(下)

8.7 多态 什么是多态? 即同一方法可以根据发送对象的不同而采用多种不同的方式。 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多。在句话我是这样理解的: 在实例中使用方法都是根据他最开始将类实例化最左边的类型来定的&…

消息中间件ApacheKafka在windows简单安装

一.背景 之前公司需要API网关管理软件ApacheShenYu,我相信把调用的记录都存到一个数据库。他支持日志推送到kafka,所以,我准备尝试一下通过kafka接收调用的日志信息。第一步,当然是安装kafka了。 二.ApacheKafka的下载 打开下载…

【C++】 解决 C++ 语言报错:Memory Leak

文章目录 引言 内存泄漏(Memory Leak)是 C 编程中常见且严重的内存管理问题之一。当程序分配了内存而没有正确释放,导致内存无法被重新利用时,就会发生内存泄漏。这种错误会导致程序占用越来越多的内存,最终可能导致系…

论文学习——动态多目标优化的一种新的分位数引导的对偶预测策略

论文题目:A novel quantile-guided dual prediction strategies for dynamic multi-objective optimization 动态多目标优化的一种新的分位数引导的对偶预测策略(Hao Sun a,b, Anran Cao a,b, Ziyu Hu a,b, Xiaxia Li a,b, Zhiwei Zhao c)In…

“免费”的可视化大屏案例分享-智慧园区综合管理平台

一.智慧园区是什么? 智慧园区是一种融合了新一代信息与通信技术的先进园区发展理念。它通过迅捷信息采集、高速信息传输、高度集中计算、智能事务处理和无所不在的服务提供能力,实现了园区内及时、互动、整合的信息感知、传递和处理。这样的园区旨在提高…

正确使用Pytorch Geometric打开Cora(Planetoid)数据集

文章目录 关于报错("Cannot connect to host")解决方法 关于报错(“Cannot connect to host”) 我们在使用PyG调用Planetoid数据集的时候,常会碰到如下报错: 解决方法就是手动下载这个数据集。…

前端播放RTSP视频流,使用FLV请求RTSP视频流播放(Vue项目,在Vue中使用插件flv.js请求RTSP视频流播放)

简述:在浏览器中请求 RTSP 视频流并进行播放时,直接使用原生的浏览器 API 是行不通的,因为它们不支持 RTSP 协议。为了解决这个问题,开发者通常会选择使用像 flv.js 这样的库,它专为在浏览器中播放 FLV 和其他流媒体格…

MySQL 代理层:ProxySQL

文章目录 说明安装部署1.1 yum 安装1.2 启停管理1.3 查询版本1.4 Admin 管理接口 入门体验功能介绍3.1 多层次配置系统 读写分离将实例接入到代理服务定义主机组之间的复制关系配置路由规则事务读的配置延迟阈值和请求转发 ProxySQL 核心表mysql_usersmysql_serversmysql_repli…

Java实现日志全链路追踪.精确到一次请求的全部流程

广大程序员在排除线上问题时,会经常遇见各种BUG.处理这些BUG的时候日志就格外的重要.只有完善的日志才能快速有效的定位问题.为了提高BUG处理效率.我决定在日志上面优化.实现每次请求有统一的id.通过id能获取当前接口的全链路流程走向. 实现效果如下: 一次查询即可找到所有关…

自定义一个背景图片的高度,随着容器高度的变化而变化,小于图片的高度时裁剪,大于时拉伸100%展示

1、通过js创建<image?>标签来获取背景图片的宽高比&#xff1b; 2、当元素的高度大于原有比例计算出来的高度时&#xff0c;背景图片的高度拉伸自适应100%&#xff0c;否则高度为auto&#xff0c;会自动被裁减 3、背景图片容器高度变化时&#xff0c;自动计算背景图片的…

Android network - NUD检测机制(Android 14)

Android network - NUD检测机制 1. 前言2. 源码分析2.1 ClientModeImpl2.2 IpClient2.3 IpReachabilityMonitor 1. 前言 在Android系统中&#xff0c;NUD&#xff08;Neighbor Unreachable Detection&#xff09;指的是网络中的邻居不可达检测机制&#xff0c;它用于检测设备是…

一文了解常见DNS问题

当企业的DNS出现故障时&#xff0c;为不影响企业的正常运行&#xff0c;团队需要能够快速确定问题的性质和范围。那么有哪些常见的DNS问题呢&#xff1f; 域名解析失败&#xff1a; 当您输入一个域名&#xff0c;但无法获取到与之对应的IP地址&#xff0c;导致无法访问相应的网…

获取VC账号,是成为亚马逊供应商的全面准备与必要条件

成为亚马逊的供应商&#xff0c;拥有VC&#xff08;Vendor Central&#xff09;账号&#xff0c;是众多制造商和品牌所有者的共同目标。这不仅代表了亚马逊对供应商的高度认可&#xff0c;也意味着获得了更多的销售机会和更广阔的市场前景。 全面准备与必要条件是获取VC账号的关…