Blaze RangePartitioning 算子Native实现全解析

news2025/4/3 7:43:54

引言:本文将全面且深入地解析Blaze RangePartitioning算子的Native实现过程。相较于原生Spark,RangePartitioning的Native实现在执行时间上达到了30%的显著下降,同时在资源开销方面节省了高达76%。这一改进大幅降低了运行成本,展现了Native实现带来的巨大优势。

一、算子描述

RangePartitioning是shuffle partitioning的一种分区类型。它通过根据数据的值范围将数据划分成多个分区。每个分区包含特定范围内的值,通常用于处理有序的数据集,能够根据数据值进行动态划分。

RangePartitioning 的基本思想是:先对数据采样找到划分标志bounds,根据bounds将数据划分成多个近似大小的区间,然后将数据按所属区间写入对应partition,用于order by 全排序场景。

二、实现方案

RangePartitioning 实现主要包含采样和partition划分两个部分。

步骤一:首先需要获取每个partition对应的区间划分范围bounds,所以会先对全量数据进行采样,算出 partitionNum - 1 个区间分割点bounds。具体流程如下:

1、在driver端基于InternalRow进行数据采样:

  • 通过spark.sql.execution.rangeExchange.sampleSizePerPartition参数控制每个分区平均采样数量,设置一个稍微过采样一点的采样数sampleSizePerPartition。

  • 对每个分区采用蓄水池采样(Reservoir Sampling)算法进行采样。

  • 对采样结果评估,记录采样不均衡的分区重新采样(某个分区数据量过多,按照sampleSizePerPartition均值采样会出现样本数少于实际应采样数量,即采样不均衡的情况)。

  • 计算每个样本的权重weight,通过sumWeights/numReducer = step找到每个边界的步长,类似于直方图划分边界找出numReducer-1个分割点bounds。

2、由于采样数据量可能不足导致bounds较少,需要重新设置partitionNum=bounds.len + 1。因此会出现RangePartitioning的实际partition num与设置数量不同的情况。

3、定义rangepartition的序列化方式,主要包括三个参数:SortExpr、numPartitions、Bounds。进而转成native 算子进行后续处理。

图片

步骤二:在native端需要再计算一次全量数据,将数据按分割点bounds写入对应的partition。具体流程如下:

1、将bounds和input数据都转成可直接比较的arrow-row类型。

2、针对每个batch,对将数据与bounds进行比较并确定所在partition id:

  • 如果bounds.len<=128,直接进行比较。

  • 如果bounds.len>128,进行二分查找提速。

图片

三、优化效果

通过构造sql语句测试加速效果:

sql测试例子

11.8GB数据量:

insert overwrite table blaze_t.like_lineitem select * from tpch_parquet_1000.lineitem order by l_quantity
实现Native RangePartitioning

执行计划:

图片

sql 时间1073.516 s

Stage Total Time Across All Tasks: 8.9h

没有实现Native RangePartitioning,会回退到spark的RangePartitioning

图片

sql 时间 1357.814 s

Stage Total Time Across All Tasks  38.1h

Blaze‍‍Spark‍‍‍

sql总耗时

1073.516 s

1357.814 s

Stage Total Time Across All Tasks

8.9h

38.1h

Stage时间提升

(38.1-8.9)/38.1 = 0.7664042

多个不同sql测试取均值

Stage时间提升:76.94%

四、总结

  • 多次测试取均值,RangePartitioning 实现native相比旧版执行时间下降30%,资源开销节约70%

  • 由于采样结果可能较少导致bounds小于partition num-1,RangePartitioning可能实际执行的partition num与设置不同。

 

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

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

相关文章

1、Window Android 13模拟器 将编译的映像文件导入Android Studio

1、环境准备 编译环境&#xff1a;Ubuntu-18.04.5编译版本&#xff1a;android13-release下载地址&#xff1a;清华大学开源软件镜像站AOSP # 下载repo # 同步代码&#xff1a;repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…

MTK-Android13-包安装器PackageInstaller 静默安装实现

目的 我们最终是为了搞明白安装的整个流程。一方面通过安卓系统自带的包安装器来了解PMS 安装流程&#xff1b;另一方面熟悉框架层Framework 针对Android apk 安装流程。 前两篇文章分析了PackagerInstaller 安装流程。 Android13-包安装器PackageInstaller-之apk安装跳转 An…

基于ffmpeg+openGL ES实现的视频编辑工具-opengl相关逻辑(五)

在我们的项目中,OpenGL ES 扮演着至关重要的角色,其主要功能是获取图像数据,经过一系列修饰后将处理结果展示到屏幕上,以此实现各种丰富多样的视觉效果。为了让大家更好地理解后续知识,本文将详细介绍 OpenGL 相关代码。需要注意的是,当前方案将对 OpenGL 的所有操作都集…

【数据库系统概论】第第12章 并发控制

12.1 并发控制概述 并发控制是指数据库管理系统&#xff08;DBMS&#xff09;通过控制多个事务同时执行&#xff0c;保证数据的一致性和隔离性&#xff0c;避免事务间的相互干扰。 事务串行执行不能充分利用系统资源 并发执行的优点&#xff1a;能够减少处理机的空闲 时间&a…

HTML应用指南:利用GET请求获取全国泸溪河门店位置信息

随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为新兴烘焙品牌之一,泸溪河自2013年在南京创立以来,一直坚持“健康美味,香飘世界”的企业使命,以匠人精神打造新中式糕点。为了更好地理解和利用这些数据,本篇文章将深入探讨GET请求的实际应用,并展示如何…

基于 JavaWeb 的 Spring Boot 调查问卷管理系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

Unity shader glsl着色器特效之 模拟海面海浪效果

一个简单的海浪效果&#xff0c;通过波的叠加实现水面起伏的动效&#xff0c;根据波峰斜率来为浪花着色&#xff0c;再根据法线贴图和水花贴图来和调整uv的平滑移动来增强海浪移动的细节。如果需要更逼真的效果可以考虑在满足浪花触发的地方添加粒子系统 前置效果图 因为是很久…

在VSCode中接入deepseek

注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key&#xff0c;呆会vscode要用&#xff0c;不然401. 打开vscod&#xff0c;电脑能上网。下插件。 下好要配置 点它一下。 要配置&#xff0c;全…

爱普生 SG-8101CE 可编程晶振在笔记本电脑的应用

在笔记本电脑的精密架构中&#xff0c;每一个微小的元件都如同精密仪器中的齿轮&#xff0c;虽小却对整体性能起着关键作用。如今的笔记本电脑早已不再局限于简单的办公用途&#xff0c;其功能愈发丰富多样。从日常轻松的文字处理、网页浏览&#xff0c;到专业领域中对图形处理…

神经网络剪枝技术的重大突破:sGLP-IB与sTLP-IB

神经网络剪枝技术的重大突破:sGLP-IB与sTLP-IB 在人工智能飞速发展的今天,深度学习技术已经成为推动计算机视觉、自然语言处理等领域的核心力量。然而,随着模型规模的不断膨胀,如何在有限的计算资源和存储条件下高效部署这些复杂的神经网络模型,成为了研究者们亟待解决的…

STM32MP157A单片机移植Linux驱动深入版

需求整理 在Linux设备树中新增leds节点&#xff0c;其有3个gpio属性&#xff0c;分别表示PE10对应led1&#xff0c;PF10对应led2&#xff0c;PE8对应led3&#xff0c;设备树键值对如下&#xff1a; leds { led1-gpio <&gpioe 10 0>; led2-gpio &l…

[大模型笔记]扣子-知识库搭建,并用Java-SDK调用的笔记

记录一下学习coze官方提供的java-sdk的过程 官方参考文档 一、搭建知识库 1、登录coze后&#xff0c;点击工作空间-资源库&#xff0c;点击右上角的资源&#xff0c;点击知识库 2、输入知识库名词以及知识库的描述 3、选择要上传的文档类型&#xff0c;点击创建并导入&…

Unity学习笔记-Unity了解,安装,简单配置(一)

Unity 是什么&#xff1f; Unity 是一款广受欢迎的跨平台游戏开发引擎&#xff0c;由 Unity Technologies 公司开发并推出。它以强大的功能和易用性&#xff0c;在游戏开发领域占据着举足轻重的地位&#xff0c;甚至可以说&#xff0c;它改变了游戏开发的格局。凭借其出色的跨…

LLaMA-Factory|微调大语言模型初探索(3),qlora微调deepseek记录

前言 上篇文章记录了使用lora微调llama-1b,微调成功,但是微调llama-8b显存爆炸,这次尝试使用qlora来尝试微调参数体量更大的大语言模型,看看64G显存的极限在哪里。 1.Why QLora? QLoRA 在模型加载阶段通过 4-bit 量化大幅减少了模型权重的显存占用。QLoRA 通过 反量化到 …

JEEWMS cgFormBuildController.do 方法mobileForm存在SQL注入

一:登录扫描 JeeWMS是一款免费开源的仓库管理系统,支持3PL和厂内物流,涵盖订单管理,仓储管理,计费管理,现场作业,RFID,AGV等功能。本文介绍了系统的简介,功能,安装,截图和链接,适合仓储企业和开发者参考。厦门市灵鹿谷科技有限公司JEEWMS jeecgFormDemoController…

python面试题整理

Python 如何处理异常&#xff1f; Python中&#xff0c;使用try 和 except 关键字来捕获和处理异常 try 块中放置可能会引发异常的代码&#xff0c;然后在except块中处理这些异常。 能补充一下finally的作用吗&#xff1f; finally 块中的代码无论是否发生异常都会执行&#xf…

深度学习之图像回归(二)

前言 这篇文章主要是在图像回归&#xff08;一&#xff09;的基础上对该项目进行的优化。&#xff08;一&#xff09;主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…

中文Build a Large Language Model (From Scratch) 免费获取全文

中文pdf下载地址&#xff1a;https://pan.baidu.com/s/1aq2aBcWt9vYagT2-HuxdWA?pwdlshj 提取码&#xff1a;lshj 原文、代码、视频项目地址&#xff1a;https://github.com/rasbt/LLMs-from-scratch 翻译工具&#xff1a;沉浸式翻译&#xff08;https://app.immersivetrans…

【鸿蒙开发】第四十四章 Map Kit(地图服务)

目录​​​​​​​ 1 Map Kit简介 1.1 场景介绍 2 开发准备 开通地图服务 3 创建地图 3.1 显示地图 3.1.1 接口说明 3.1.2 开发步骤 1、地图显示 2、设置地图属性 3、开启3D建筑图层 4、地图前后台切换 5、深色模式 3.2 切换地图类型 3.2.1 场景介绍 3.2.2 接…

EasyExcel 自定义头信息导出

需求&#xff1a;需要在导出 excel时&#xff0c;合并单元格自定义头信息(动态生成)&#xff0c;然后才是字段列表头即导出数据。 EasyExcel - 使用table去写入&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E4%BD%BF%E7%94%A8table%E…