基于英特尔® 优化分析包(OAP)的 Spark 性能优化方案

简介: Spark SQL 作为 Spark 用来处理结构化数据的一个基本模块,已经成为多数企业构建大数据应用的重要选择。但是,在大规模连接(Join)、聚合(Aggregate)等工作负载下,Spark 性能会面临稳定性和性能方面的挑战。

Spark SQL 作为 Spark 用来处理结构化数据的一个基本模块,已经成为多数企业构建大数据应用的重要选择。但是,在大规模连接(Join)、聚合(Aggregate)等工作负载下,Spark 性能会面临稳定性和性能方面的挑战。

为了提升 Spark SQL 的性能,用户可以选择使用英特尔® 优化分析包(Optimized Analytics Package,OAP)以及英特尔® 傲腾™ 持久内存和新一代英特尔® 至强® 处理器来改善典型 Spark SQL 工作负载的运行效率。

Spark SQL 面临多场景性能瓶颈

IDC 报告显示,全球数据规模将从2019年的45 ZB 增长到2025年的175 ZB ,2020年创建、捕获和消耗的数据量估计过 59 ZB。在数据快速移动、迅猛增长的趋势下,企业需要使用先进的分析技术来实时处理数据以获得实时的业务洞察力。大数据分析技术的新发展与革命性新硬件的问世,显著提高了大数据分析性能,使得数据科学家、分析师和业务用户能够获得更深刻的业务洞察。

作为面向大规模数据处理而设计的快速通用的计算引擎,Spark 具有开源、经济、灵活等优点,常用来构建大型、低延迟的数据分析应用程序。但是,Spark 在特定场景下依然会面临性能挑战,特别是当处理特大规模数据及交互式查询时。例如,由于缺少高性能缓存方案,数据 I/O 很容易成为瓶颈。此外,Spark Shuffle 也常常因为大量的较小随机磁盘 IO、序列化、网络数据传输成为性能瓶颈,导致作业延迟大幅增加,进而影响工作负载性能。

新兴的硬件技术可以帮助解决这些挑战。例如,高级矢量扩展(AVX)功能使 Spark 能够利用 SIMD 同时处理更多的数据来加快执行速度,而英特尔® 傲腾™ 持久内存可以利用其高性能,大容量和低延迟创新的突破性组合来提高 Spark SQL 性能。OAP(优化分析包)是英特尔和社区开发的一个开源项目,旨在借助先进的英特尔处理器、内存和存储以及网络技术,通过数据源缓存、SQL 索引、Native SQL 引擎、MLlib 优化等创新软件功能提高 Spark 性能,以解决 Spark 核心和相关组件面临的计算和 I/O挑战。

英特尔 Spark 优化分析包(OAP)

英特尔® 优化分析包(OAP)是英特尔和社区开发的开源项目,旨在提高 Spark 性能。它基于先进的英特尔硬件技术,提供了多种功能来改善 Spark 高速缓存、Shuffle、执行和机器学习性能。如下图1显示了 OAP 架构,它包括以下组件:OAP 数据源高速缓存、Native SQL 引擎、Arrow 数据源、OAP MLlib、RDD 高速缓存、RPMem Shuffle 和远端 Shuffle。

  • SQL 数据源高速缓存: 一种优化的扩展包,通过在 Spark SQL 数据源层使用高速缓存技术来提升 Spark SQL 性能。
  • Native 执行引擎: Spark SQL 的 Native 引擎将 Spark 行数处理转为列式处理,并借助矢量化 SIMD 以及 Arrow 数据格式进行加速。
  • MLlib: Vanilla Spark MLlib 的替代版本,通过oneDAL、oneMKL 和 oneCCL 进行了优化。
  • RDD 高速缓存、RPMem Shuffle 等功能:通过借助持久内存的大容量、高性能等特点来避免存储溢出(包括 RDD 高速缓存、溢出、中间数据),提高 Spark 性能。
  • 远端 Shuffle: 支持远端 Shuffle 和基于持久内存的 Shuffle。

image.png

(图1)

OAP 数据源高速缓

数据源高速缓存(SQL DataSource Cache)旨在利用用户定义的索引和智能细粒度内存数据高速缓存来提高 Spark SQL 性能(如图2所示),主要目的是解决交互式查询和批处理作业的性能问题。

image.png

(图2)

  • 交互式查询

大多数用户使用 Spark SQL 作为批处理引擎。但作为一个统一处理引擎,很难与非批处理区分。交互式查询需要在几秒、甚至几亚秒内返回数据,而非批处理所需的几分钟、甚至几小时。这对于当前的 Spark SQL 数据处理来说是一个很大的挑战。交互式查询通常处理较大的数据集,但在通过特定条件过滤后只返回一小部分数据。通过为关键列创建和存储完整的 B+ 树索引,并使用智能细粒度内存数据高速缓存策略,Spark SQL 交互式查询处理时间可以显著缩短

  • 批处理作业

对于在数据仓储中使用 Spark SQL 进行业务分析的用户,OAP SQL 数据源高速缓存可以通过两种可配置的高速缓存策略来加速批处理作业:

• 自动高速缓存热数据。

• 专门高速缓存热表。

SQL 索引和数据源高速缓存为不同列式存储格式提供统一的高速缓存表示形式,并设计了针对 RowGroup 中单列的细粒度高速缓存单元。同时,它为两种列存储文件格式 Parquet 和 ORC 设计了兼容的适配器层,索引和高速缓存都构建在统一表示形式和适配器之上。

OAP 数据源高速缓存架构设计

数据源高速缓存可以高速缓存已解压缩和已解码的矢量化数据以及二进制原始数据。一般来说,DRAM 通常在 Spark 集群中用作高速缓存介质,但在 OAP 数据源高速缓存中,英特尔® 傲腾™持久内存也可以用作高速缓存介质,以提供高性能、高成本效益的高速缓存解决方案。如下图3显示了英特尔® 傲腾™ 持久内存用作高速缓存介质时的 OAP 数据源高速缓存的架构设计。

image.png

(图3)

OAP 数据源高速缓存提供以下主要功能:

  • 覆盖内置的 Parquet/ORC 文件格式。
  • 在分布式集群中提供本地 cache(需要外部 KV 存储以支持元数据持久性)。
  • NUMA 绑定以提供更高性能(若启用英特尔® 傲腾™ 持久内存的 snoopy 模式,则不需要 NUMA 绑定)。
  • 基于 Plasma 的实现,从而支持多个 spark 执行单元同时访问缓存。

OAP RPMem Shuffle

Spark 旨在为不同的工作负载(如即席查询、实时流和机器学习)提供高吞吐量和低延迟的数据处理。但是,在某些工作负载(大规模数据连接/聚合)下,由于 Shuffle 需要在本地 Shuffle 磁盘读取/写入中间数据并将其通过网络传输,Spark 可能会出现性能瓶颈。英特尔® 傲腾™ 持久内存是一种创新型内存技术,相较于 DRAM,其在同等价位下一般可提供更大的容量,并且支持数据的持久性。同时,远程直接内存访问(RDMA)技术支持在不同计算机之间进行独立于操作系统的直接内存访问,从而提供高吞吐量、低延迟的网络性能。使用高性能英特尔® 傲腾™ 持久内存和 RDMA 网络可以帮助在一定程度上化解 Shuffle 挑战。

OAP RPMem Shuffle 提供了一个名为 RPMem Shuffle 扩展的可插拔模块,该模块可通过修改配置文件覆盖默认的 Spark Shuffle 管理器,无需更改 Spark 代码即可使用。使用此扩展,Spark shuffle 可以充分利用英特尔® 傲腾™ 持久内存和 RDMA Shuffle 解决方案,相较于传统的基于磁盘的 shuffle 方式,可以显著提高 Shuffle 性能。

OAP RPMem Shuffle 架构设计

如前文所述,Spark Shuffle 是一项成本高昂的操作,需要大量的小型随机磁盘 IO、序列化、网络数据传输等步骤,因此会大幅增加作业延迟,并且很容易成为工作负载性能的瓶颈。通常,Spark Shuffle 将从底层存储加载数据并作为 Mapper 的输入,然后 Mapper 将根据某种规则处理数据,例如根据特定的 Key 将数据分组到不同的分区中。每个 Mapper 的输出都会持久化到本地存储中,即 Shuffle 写操作。然后 Reducer 会尝试读取不同 Mapper 的输出数据,即 Shuffle 读操作,再将读入的数据进行排序等聚合操作,并最终输出结果。可以看到,一个经典的 Shuffle 操作包括数据在磁盘的读写和在网络的传输,而这二者在大数据集下都可能成为工作负载的性能瓶颈。

OAP RPMem Shuffle 旨在解决 Shuffle 瓶颈。如下图4所示,OAP RPMem Shuffle 可以通过附加库的形式覆盖现有的 Spark Shuffle 实现。在底层,它使用英特尔® 傲腾™ 持久内存作为 Shuffle 介质,并在用户空间通过 libpmemobj 对英特尔® 傲腾™持久内存进行访问,作为 PMDK 的重要组件,libpmemobj 在英特尔® 傲腾™ 持久内存上提供了事务对象存储。OAP RPMemShuffle 扩展使用 Java Native Interface 对 libpmemobj 进行封装,并通过 Spark Shuffle Manager 以插件的方式接入Spark。

image.png

(图4)

RDMA 网卡是 RPMem Shuffle 扩展的可选项,它可以增加网络带宽,降低网络延迟和通信节点的 CPU 利用率。HPNL4 作为一款高性能网络库,支持各种网络协议,如 TCP/IP、RoCE、iWRAP、OPA 等,它为 RPMem Shuffle 提供网络通信支持。如下图5显示了 Vanilla Spark Shuffle 和 OAP RPMem Shuffle 的设计。

image.png

(图5)

在 Vanilla Spark Shuffle 设计中,需要首先将数据序列化到堆外内存,然后写入机械硬盘或固态盘上的本地文件系统,并最终通过 TCP-IP 网络传输数据。这一过程涉及大量上下文切换和文件系统开销,因此如果不对现在的 Spark shuffle 实现进行更改,就无法充分利用英特尔® 傲腾™ 持久内存的能力。

OAP RPMem Shuffle 使用 libpmemobj 库将数据直接写入英特尔® 傲腾™ 持久内存,然后通过将 RDMA 内存区域注册在英特尔® 傲腾™ 来传输数据。此实现方案减少了上下文切换开销,消除了文件系统开销,并可充分利用 RDMA 实现零拷贝来进一步降低延迟和 CPU 利用率。

原文链接
本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

表格长度_知道你的成绩单是怎么打印的吗?超长Excel表格1页打印,拯救A4纸

中小学的成绩单,红色的一张榜真实的魔鬼!每次都得瞄半小时才找得到自己的全部科目成绩,不知道是不是为了节省A4纸~到了大学我才知道A4纸的珍贵,字小算什么,打印论文恨不得双面打印。要是能八号字打印更好了~到了工作的…

苹果电脑上使用linux环境变量,mac系统下修改环境变量

苹果电脑使用率越来越高,在mac系统下研发,性能要比在windows下快不少,既然要开发,免不了要配置环境变量.下面是学习啦小编收集整理的mac系统下修改环境变量,希望对大家有帮助~~mac系统下修改环境变量的方法工具/原料os…

提升代码质量的方法:领域模型、设计原则、设计模式

简介: 我们可以列举出非常多质量差的代码的表现现象,其中最影响代码质量的两个表现是命名名不副实、逻辑可扩展性差,当一个新人阅读代码时,有时发现方法命名与实际逻辑对不上,这就让人感到非常疑惑,这种现象…

SphereEx 完成近千万美元 Pre-A 轮融资,连接企业数据与应用,构建新一代数据库生态引擎

2022年1月4日,创新型数据库基础软件提供商 SphereEx 宣布完成近千万美元 Pre-A 轮融资,本轮融资由嘉御资本领投,红杉中国种子基金、初心资本、指数创投跟投。指数资本担任独家财务顾问。这是继 2021 年 5 月份以来,SphereEx 完成的…

Javascript 机器学习的四个层次

简介: Atwood定律说,凡是可以用Javascript实现的应用,最终都会用Javascript实现掉。作为最热门的机器学习领域,服务端是Python的主场,但是到了手机端呢?Android和iOS里默认都没有Python。但是有浏览器的地方…

运维监控再添新品,F5联合智维数据推出应用质量主动拨测解决方案

一直以来,业务的稳定性和客户体验是企业各个部门都关注的重点,也是企业数字化转型的重要支撑。但在实际的运维环境中,如果只从服务端的视角进行监控,往往会出现数据中心内部监控体系显示设备状态正常,但却收到了客户端…

排查指南 | 两个案例学会从埋点排查 iOS 离线包

简介: 首次打开离线包白屏以及报错“-1009”等该如何处理呢? 离线包原理 以一次启动离线包的流程为例,离线包的加载流程分为两种场景,第一种是离线包下载好的场景,流程如图1所示,第二种是离线包没下载好的…

如何设计可靠的灰度方案

简介: 一个较大的业务或系统改动,往往会影响整个产品的用户体验或操作流程。为了控制影响面,可以选取一批特定用户、流程、单据等,只允许这一部分用户或数据按照变更后的新逻辑在系统中流转,而另一部分用户仍然执行变更…

linux如何设置mac快捷键,在Ubuntu上使用macOS的快捷键

因为常用机一台Mac,一台Linux,都频繁使用,两个系统不同的快捷键已经让人精神分裂了!macOS几乎所有的快捷键都基于command键,全选(cmda)、复制(cmdc)、粘贴(cmdv)、开关标签页(cmdt/w)、切换窗口(cmdtab)、保存(cmds)、…

IDC报告:阿里云领跑中国数据库市场年度份额首超传统厂商

简介: IDC报告显示,2020年中国关系型数据库软件市场规模达到121.8亿元,同比增长36.5%。其中,以公有云模式部署的关系型数据库市场占比达到51.5%,首次超过传统线下部署模式市场规模,预计到2025年将继续走高&…

稳若磐石的「云上奥运」背后,是云计算新界面的崛起

简介: 今年奥运会首次采用阿里云支撑全球转播,这是奥运迈入数字时代的重要一步。对于这届特殊的奥运会来说,技术至关重要。我们相信,这次创造历史的实践,将为未来支撑更多体育爱好者把“云观赛”转变为参与国际体育赛事…

10分钟!构建支持10万/秒请求的大型网站

简介: 应用网关作为应用的统一接入层,它的发展和演进也是伴随着应用架构的变化,大家都知道企业应用从最早期 SOA 时代发展到微服务的时代。在 SOA 时代,传统的企业服务总线承担了企业应用的统一接入层;但是发展到微服务…

服务实体经济、战略级行业再下一城,钉钉发布制造行业解决方案2.0

编辑 | 宋慧 出品 | CSDN 云计算 1月5日,钉钉召开主题为“数字新生”的2022制造业钉峰会。会上,钉钉正式发布制造行业解决方案2.0,该方案以“码上制造”产品为制造行业专属底座,提供设备上钉、计件日结等基础产品,同时…

阿里云边缘云全新架构升级,助力CDN操控新体验

简介: 本次升级根据上万企业客户的使用反馈和行业应用特征,从简单开通到个性化定制,从内容分发到边缘计算完整解决方案,对客户侧的使用体验进行了全局梳理和全链路优化,推进边缘云CDN操控革新,并逐步构建面…

key redis 遍历_快乐运维Redis大数据量查询与清理

一、 keys命令(生产环境禁止使用)简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。key…

linux部分基础命令总结,Linux常用基础命令总结

近期自己学习了一下Linux,写这篇博客以便于对自己的一个总结,记录自己的学习情况,奥利给!想对Linux熟练掌握,就必须学会它的操作命令,虽然可能会花费一些时间,不过从长远的角度来说,…

MaxCompute执行引擎核心技术DAG揭秘

简介: 作为业界少有的EB级数据分布式平台,MaxCompute每天支撑上千万个分布式作业的运行。这些作业特点各异,既有包含数十万计算节点的超大型作业,也有中小规模的分布式作业。不同用户对于不同规模/特点的作业,在运行时…

自定义导航页_带你回归“真”的导航页

曾经浏览器主页是我们流向各大网站的要道从这里我们可以轻而易举的去往想要去的网站特别是在信息和专业性越来聚集的今天传统的主页难免令人有些审美疲劳或者说花里胡哨hao1232345是这些老牌的主页网站有些审美疲劳随着导航越来越细节化广告也越来越多美感也更少360主页qq主页百…

Redis 压缩列表原理与应用分析

作者 | 西瓜来源 | JAVA架构进阶之路摘要Redis是一款著名的key-value内存数据库软件,同时也是一款卓越的数据结构服务软件。它支持字符串、列表、哈希表、集合、有序集合五种数据结构类型,同时每种数据结构类型针对不同的应用场景又支持不同的编码方式。…

基于 MaxCompute 的智能推荐解决方案

简介: 在互联网行业红利已过、在获客成本越来越高、在用户在线时长全网基本无增长以及信息大爆炸的情况下,如何更好的转化新用户和提升老用户粘性就变得至关重要,智能化的个性化推荐无疑是经过验证的重要手段之一,我们每天使用的移…