基于DPU云盘挂载的Spark优化解决方案

news2025/1/9 5:57:09

1.  方案背景和挑战

Apache Spark,作为当今大数据处理领域的佼佼者,凭借其高效的分布式计算能力、内存计算优化以及强大的生态系统支持,已牢固确立其在业界的标杆地位。Spark on Kubernetes(简称K8s)作为Spark与Kubernetes这一领先容器编排平台深度融合的产物,不仅继承了Spark的强大数据处理能力,还充分利用了Kubernetes在资源管理、服务发现和弹性伸缩方面的优势,正逐步引领大数据处理迈向更加灵活、高效的新纪元。

与此同时,随着云计算技术的飞速发展,NVMe/TCP云盘作为一种创新的高性能存储解决方案,凭借其在低延迟、高吞吐量以及易于集成到现代云架构中的特点,日益受到大规模数据中心和云环境用户的青睐。这种存储方案通过TCP/IP协议实现远程NVMe设备的直接访问,极大地拓展了数据存取的边界,但也随之带来了特定的技术挑战。

具体而言,NVMe/TCP云盘在利用TCP/IP协议进行数据交互时,不可避免地涉及到了复杂的数据包处理流程,包括用户态与内核态之间的频繁数据拷贝、网络报文的接收、峰值流量的处理以及协议栈的深入解析等。这一系列操作大幅增加了CPU的负担,尤其是在高并发、大数据量场景下,大量CPU资源被非业务核心的数据包处理工作所占用,导致CPU资源利用率低下,甚至成为性能瓶颈。

当Apache Spark试图挂载并利用NVMe/TCP云盘进行大规模数据处理时,上述挑战便显得尤为突出:

1、Spark作业在执行过程中,若频繁遭遇CPU资源被TCP/IP协议栈处理所挤占的情况,不仅会直接限制Spark任务的处理速度,还可能导致任务执行延迟增加,进而影响整个数据处理流水线的吞吐率和效率。

2、由于CPU资源的争夺,Spark原本有望进一步提升的磁盘I/O性能也受到了限制,难以充分发挥NVMe/TCP云盘应有的高性能潜力。

为了解决Spark在挂载NVMe/TCP云盘时面临的CPU资源占用过高和磁盘吞吐性能受限的问题,亟需探索并实施一系列优化策略和技术方案。这可能包括但不限于:采用更高效的数据传输协议或技术(如RDMA),以减少CPU在数据拷贝和网络处理上的负担,提升数据传输性能;优化Spark作业的调度与执行策略,以更加合理地分配CPU资源;以及针对NVMe/TCP云盘特性进行专门的性能调优,如调整TCP窗口大小、优化网络队列配置等。

RDMA技术允许数据在远程主机的内存之间直接传输,无需经过CPU处理,从而极大地降低了数据传输的延迟并减少了CPU的负载。这一特性直接解决了Spark和Kubernetes集群中,尤其是在使用NVMe-oF云盘时,因网络传输效率低下而可能导致的性能瓶颈问题。

本方案通过DPU实现NVMe/RDMA的云盘挂载,从而提升Spark在云环境下处理大数据时的整体性能和效率。

2.  整体方案概述

本方案采用云原生架构,Spark采用Spark on Kubernetes部署模式,并且引入DPU为集群之上的容器提供存储服务的卸载和加速,融合了云原生架构与高性能存储的优势。方案整体架构如下图所示:

l  存储集群把NVMe存储设备以裸盘方式部署,计算节点通过硬件模拟向宿主机提供标准的nvme/virtio块设备,对存储协议的处理都卸载到DPU,提供硬件加速的NVMe over RDMA能力。

l  K8S平台通过yusur-csi存储插件提供基于DPU的云盘挂载能力。

l  将Spark应用部署在K8S集群之上,Spark Pod挂载DPU硬件加速的NVMe/RDMA云盘,以更低的资源消耗获得更高的读写效率。

3.  测试方法和结果

3.1. 软件环境

软件包/工具/数据集列表

名称

版本

来源

备注

Spark

3.4.2

社区开源项目

开源大数据处理框架

Java

17.0.10 (Eclipse Adoptium)

开源项目Spark自带

Spark镜像内置的依赖环境

containerd

1.6.21

社区开源项目

容器运行时

Kubernetes

v1.26.5

社区开源项目

开源容器编排框架

yusur-csi

V6.0

自研

Kubernetes存储插件,为裸金属提供云盘挂载功能。

3.2. 测试方案

Spark SQL是Spark开发常用的编程接口,本方案使用Spark SQL运行一个聚合查询,SQL语句如下:

select count(1) from tblong where id=1

Spark使用Spark on Kubernetes部署模式,为了数据加载的完整性,关闭Spark SQL的谓词下推机制。输入数据是Parquet文件,包含一个Long类型的数据列,所有输入文件大小之和是45G。

Spark 分配4个Executor(Pod),每个Executor分配8个core,Spark核心参数如下

$SPARK_HOME/bin/spark-submit \

    --master k8s://https://10.0.151.186:6443  \

    --deploy-mode cluster \

    --driver-cores 4 \

    --driver-memory 40G \

    --executor-cores 8 \

    --executor-memory 40G \

    --num-executors 4\

    --conf spark.executor.memoryOverhead=2G \

    --conf spark.dynamicAllocation.enabled=false \

    --conf spark.sql.parquet.filterPushdown=false \

    --conf spark.kubernetes.namespace=spark \

    --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \

    --conf spark.kubernetes.container.image=harbor.yusur.tech/bigdata/spark:spark3.2.0-hadoop3 \

3.3. 节点网络拓扑

测试环境包含一个存储节点和一个计算节点,各有一个DPU加速卡,两个节点之间通过100G交换机连接。测试环境节点网络拓扑如下图所示:

对于NVMe/TCP云盘,DPU使用TCP协议连接存储服务,不卸载存储协议的处理,这种情况下,DPU充当普通网卡。

对于NVMe/RDMA云盘,DPU使用RDMA协议连接存储服务,把存储协议卸载到DPU硬件。

3.4. 关注指标

本方案重点关注CPU资源的使用率,包括系统内核CPU使用率和用户态CPU使用率。

指标名称

指标描述

数据加载时间(单位:秒)

对于Spark SQL任务,对应Scan算子时间

E2E时间(单位:秒)

从数据加载开始到结果输出结束的时间间隔

磁盘吞吐量(单位:MB/s)

磁盘在单位时间内能够读写的数据总量,通过fio工具测试

内核态CPU使用率

主机CPU运行在用户态的时间占比,通过top命令采集

用户态CPU使用率

主机CPU运行在用户态的时间占比,通过top命令采集

3.5. 测试结果

3.4.1性能数据

Spark 分配4个Executor(Pod),每个Executor分配8个core。 相比于挂载云盘,挂载NVMe/RDMA云盘,Spark数据吞吐性能提升22.2%,数据加载时间缩短18.2%。

不同存储云盘下,数据加载时间及E2E时间对比如下图所示:

Spark磁盘吞吐性能对比如下图所示:

具体数据见下表:

对比指标

NVMe/TCP云盘

DPU NVMe/RDMA云盘

数据加载时间(秒)

11

9

E2E时间(秒)

12

10

磁盘吞吐(MB/s)

4179.78

5108.62

3.4.2资源使用数据

运行过程资源监控图如下图所示:

从监控图发现内存使用波动较少,本方案内核态CPU使用率平均减少17.14%,用户态CPU使用率平均增加7.39%,平均CPU资源消耗如下图所示:

平均CPU资源占用数据如下表所示

存储云盘类型

sys_cpu(均值)

user_cpu(均值)

合计

 NVMe/TCP云盘

12.66%

26.25%

38.91%

NVMe/RDMA云盘

10.49%

28.19%

38.68%

3.4.3测试数据分析

本次试验通过测试Spark SQL读取Parquet文件做聚合计算,分配4个Executor(Pod),每个Executor分配8个core,也就是说实际运行过程中并行度为32。

相比于挂载NVMe/TCP云盘,挂载NVMe/RDMA云盘可使Spark数据吞吐性能提升22.2%,数据加载时间缩短18.2%。

从运行过程中的资源监控图来看,挂载NVMe/RDMA云盘,Spark消耗更少的内核态CPU资源。内核态CPU资源使用率减少17.14%,但数据加载性能更高,因此占用了更多的用户态CPU资源。这与RDMA本身的特点是相符的,RDMA 将协议栈的实现下沉至DPU硬件,绕过内核直接访问远程内存中的数据。

综合用户态CPU和内核态CPU使用情况,不管是挂载NVMe/TCP云盘还是挂载NVMe/RDMA云盘,Spark的资源消耗都在一个水平上,但是挂载NVMe/RDMA云盘时,Spark运行速度更快,对资源占用时间更短,所以整体来看,本方案事实上节省了系统CPU资源。

4.  优势总结

本方案通过引入DPU(数据处理单元)实现NVMe/RDMA云盘挂载,以优化Spark在云环境下处理大数据的性能和效率,其优势可以总结为以下几点:

1、显著提升数据吞吐性能:

采用NVMe/RDMA技术相比于传统的NVMe/TCP,能够大幅提升数据在云环境中的传输速度。本方案测试结果显示,数据吞吐性能提升了22.2%,这意味着Spark作业在处理大规模数据集时能够更快地读取和写入数据,从而显著减少数据处理的总时间。

2、大幅缩短数据加载时间:

数据加载是大数据处理流程中的关键瓶颈之一。通过NVMe/RDMA云盘的挂载,数据加载时间缩短了18.2%,这对于需要频繁访问大量数据集的Spark应用来说尤为重要,可以显著提高应用的响应速度和整体效率。

3、减少非业务负载对CPU资源的占用:

NVMe/RDMA技术通过减少数据传输过程中对CPU的依赖,将数据传输的负载从主机CPU转移到DPU上。这不仅降低了主机CPU的负载,还使得CPU资源能够更多地用于数据处理等核心业务逻辑,从而提升整体的系统效率和性能。

4、优化资源利用率:

由于数据加载和传输速度的提升,Spark作业可以更快地完成数据处理任务,从而提高了云资源的利用率。云环境中的资源(如CPU、内存、存储)通常按使用量计费,因此更快的处理速度意味着更低的成本。

综上所述,本方案通过引入DPU实现NVMe/RDMA云盘挂载,为Spark在云环境下处理大数据提供了全面的性能优化,显著提升了数据吞吐性能、缩短了数据加载时间、减少了CPU资源占用,并优化了系统的资源利用率。

本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。

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

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

相关文章

代码随想录训练营 Day30打卡 贪心算法 part04 452. 用最少数量的箭引爆气球 435. 无重叠区间 763. 划分字母区间

代码随想录训练营 Day30打卡 贪心算法 part04 一、 力扣452. 用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球…

YoloV8改进策略:Block改进|LeYOLO,一种用于目标检测的新型可扩展且高效的CNN架构|复现LeYolo,轻量级Yolo改进

摘要 在目标检测中,深度神经网络的计算效率至关重要,尤其是随着新型模型越来越注重速度而非有效计算量(FLOP)。这一发展趋势在某种程度上忽视了嵌入式和面向移动设备的AI目标检测应用。在本文中,我们基于FLOP关注于高…

热泵干燥应用举例

热泵在木材加工中的应用主要是热泵干燥,具有能耗低、干燥质量好等特点。热泵木材干燥装置的基本结构是封闭式干燥窑,其中热泵机组的结构有单热源型(图18-4)、双热源型(图18-5)和空气回热型(图18…

深入理解Java中的ConcurrentHashMap:高效线程安全的并发容器

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

Java并发:内存屏障,Atomic类,CAS函数,伪共享

阅读本文之前可以看一看 Java 多线程基础: Java:多线程(进程线程,线程状态,创建线程,线程操作) Java:多线程(同步死锁,锁&原子变量,线程通信&…

【学习笔记】A2X通信的协议(十)- 通过PC5的直接探测与避让(DDAA)

3GPP TS 24.577 V18.1.0的技术规范,主要定义了5G系统中A2X通信的协议方面,特别是在PC5接口和Uu接口上的A2X服务。以下是文件的核心内容分析: 8. 通过PC5的直接探测与避让(DDAA) 8.1 概述 本条款描述了UE之间以及UE上…

论文阅读:Efficient Core Maintenance in Large Bipartite Graphs | SIGMOD 2024

还记得我们昨天讨论的《Querying Historical Cohesive Subgraphs over Temporal Bipartite Graphs》这篇论文吗? https://blog.csdn.net/m0_62361730/article/details/141003301 这篇(还没看的快去看) 这篇论文主要研究如何在时间双向图上查询历史凝聚子图,而《E…

CAD二次开发IFoxCAD框架系列(18)-块表操作

1. 块表的查询 1.1 查找名为“自定义块”的块表中的图块记录 using var tr new DBTrans(); if (tr.BlockTable.Has("自定义块")) {//要执行的操作 }遍历块表并打印所有的块表的图块名称 public void Test_DBTrans_BlockCount() {using var tr new DBTrans();var…

CentOS7.9上通过KVM安装Centos虚拟机

目录 1 开发前准备(先确保服务器可以虚拟化): 2、安装KWM环境 3、创建镜像文件存放目录 4、创建镜像文件存放目录 5、安装桥连接虚拟网络 6、安装虚拟机 7、配置操作系统 8、虚拟机配置网卡地址 9、克隆虚拟机执行 1开发前准备&am…

Git文件管理技巧:轻松删除与查看文件,忽略不必要的文件与文件夹!

避免文件混乱:Git 文件操作技巧 一、Git工作原理概述二、删除文件三、查看指定文件的修改四、指定不需要 Git 管理的文件五、总结 一、Git工作原理概述 Git是一种分布式版本控制系统,其核心在于其高效的快照机制、强大的分支与合并功能、本地开发的灵活…

数据集与数据库:有什么区别?

数据集和数据库是我们在处理数据时经常听到的两个常用词。虽然它们听起来很相似,但它们具有不同的特征并用于不同的用途。本文深入探讨数据集和数据库之间的主要区别,探索了它们的结构、数据类型和各种其他功能,以帮助您做出明智的决定&#…

回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出

回归预测|基于灰狼优化GWO-Transformer-LSTM组合模型的数据回归预测Matlab程序 多特征输入单输出 文章目录 前言回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出GWO-Transformer-BiLSTM 一、GWO-Transformer-BiLSTM模型二、实验…

uniapp打包H5的时候 清楚缓存(不安装依赖的前提下)

问题 在写项目的时候,打包好一个H5 发布成功,后来又重新打包新的包进行更新迭代,但是用户手机上还是上一个版本,本地缓存还是没有清除。 解决问题 步骤一:html不缓存 在html中,解决缓存的方法主要是依赖…

文章解读与仿真程序复现思路——电力自动化设EI\CSCD\北大核心《海上风电全直流汇集送出系统自适应振荡抑制策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【小bug】springMVC通过json传参无法解析参数

0.问题描述 通过postman测试使用json传参的时候,发现不论怎么修改,都无法获取参数,解析对象。 反复检查请求url,请求内容均为正常。 以下是postman测试结果: 日志提示无法解析参数,内容如下:…

C# VideoCapture 多路视频播放

目录 效果 项目 代码 下载 效果 C#VideoCapture多路视频播放 项目 代码 using OpenCvSharp; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Threading.Tasks…

MS5046T/5047T/5048T/5048N_2kSPS、16bit Σ-Δ ADC

MS5046T/MS5047T/MS5048T/MS5048N 是适合高精 度、低成本测量应用的 16bit 模数转换器。其内部集成低 噪声可编程增益放大器、高精度 Δ-Σ 模数转换器和内部振 荡器。 MS5047T 、 MS5048T 、 MS5048N 内部还集成低温 漂基准和两路匹配的可编程电流源。 MS5048T/MS50…

计算机毕业设计 健身房管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

springboot考勤管理系统代码调试讲解论文

2 相关技术 2.1 MySQL数据库 该研究和开发的应用程序在数据操作中难以预料,有时候甚至发生改变。没办法直接从Word中写数据和信息,这不但不安全的,并且难以实现应用程序的功效。要实现所需要的文档存储作用,请尽快选择专业数据存…

【JPCS独立出版,EI稳定检索】2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024,9月27-29)

2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024)将于2024年9月27-29日在中国成都举办。 此次会议将围绕工业机器人、机电技术、机械及制造等领域的最新研究成果展开讨论,并广泛邀请了国内外领域内的著名专家与学者。会议旨在搭建一个…