在 Kubernetes 上运行 Apache Spark 进行大规模数据处理的实践

在刚刚结束的 Kubernetes Community Day 上海站,亚马逊云科技在云原生分论坛分享的“在 Kunernets 上运行 Apache Spark 进行大规模数据处理实践”引起了现场参与者的关注。开发者告诉我们,为了充分利用 Kubernetes 的高可用设计、弹性,在越来越多的应用场景中,他们选择从 Yarn 迁移到 Kubernetes 中运行 Spark 负载。我们认为,Amazon EKS 作为成熟的托管 Kubernetes 平台,是客户运行 Spark 负载的理想选择,我们的分享围绕在 Amazon EKS 上运行 Spark 负载的最佳实践展开,包括:计算和基础设施、弹性扩展、存储、健壮性和灾备以及可观测性等五个方面的内容。

 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

image.png

image.png

Amazon EKS 上运行 Spark 负载的最佳实践
一、计算和基础设施

计算和基础设施涵盖了 Spot、Graviton、应用开发语言、操作系统等方面的最佳实践介绍。

1. 尝试采用 ARM 架构和 Spot

通过选择将 Spark 运行在 arm 架构上,可获得高达 58% 的性价比优势【1】,同时,也建议客户通过多架构的方式,提升系统可靠性。降本增效的核心在于怎样以最低的成本获得更快的计算结果,充分利用 Spot 可为降本提供基础,同时,必须处理好 Spot 中断,以提升系统的健壮性。

image.png

2. 采用容器化操作系统
降低运维成本和提高敏捷性

容器作为不可变基础设施,具有快速创建、快速销毁、大规模等特点。Spark workload 需要一个什么样的操作系统呢?亚马逊云科技在 2020 年推出的开源容器化操作系统 Bottlerocket【2】,很好地满足了 Spark workload 的要求。

  1. 最小化。只包括运行容器所必需的包、不可变、启动速度快。

  2. 原子更新。基于 image 进行更新,避免传统操作系统更新遇到的失联、rpm 包更新慢等问题,同时,在升级遇到问题时,可快速回滚到上一个版本中,也支持通过 Operator 方式进行批量管理。

  3. 安全。默认开启 SELinux 策略、只读根文件系统、无 Linux 包管理工具,为 Spark workload 保驾护航。

同时,如果 Spark pod 镜像太大的话,可以考虑将镜像缓存到 EC2 镜像中,或者采用 Bottlerocket 的方式进行缓存,进一步节省镜像拉取时间。

3. JDK 版本的选择

从 JDK 版本来看,JDK8U91 才能更好地兼容容器,如果开启了 cgroup v2,则建议使用 jdk8u372,jdk8u372, 11.0.16, 15 或者以上的版本。而不同 JDK 版本下,SPECjbb 的表现也是不一样的。我们看到相对较高的 JDK 版本,其性能也会比较好。建议根据实际的场景,适时升级 JDK 的版本以获取较好的性能。

image.png

二、弹性扩展
1. Karpenter 开源高效 Node 弹性扩展工具

Spark workload 在某些场景下对 Pod 启动 Latency 有一定的要求,同时,Spark 具有瞬时启动几百甚至几千 Pod 的情况。那么,如何能够快速响应 Spark 弹性扩展的需求呢?

亚马逊云科技于 2021 年开源了 Node 弹性扩展 Karpenter【3】,其具有配置简单、扩展速度快、成本优化策略等特点,是客户运行 Data workload 理想的弹性扩展工具。同时,Karpenter 内置 bin-packing、fallback 等策略,简化客户在使用 Spot、Graviton 等基础设施的配置工作。

从性能上来看,根据社区测试数据,Karpenter 在大规模下具有明显优势,建议大家在 Amazon EKS 上运行 Spark workloads 时,可以考虑选择 Karpenter 作为 node 弹性扩展工具。

2. 继续使用 Cluster Autoscaler

如果因为其他原因,您还是继续想使用 Cluster Autoscaler,建议可以考虑将不同业务域的作业划归到不同的 namespace 中,避免出现只有一个 namespace 运行所有作业的情况。同时,可以每个 namespace 中运行一个 Cluster Autoscaler,防止出现 Cluster Autoscaler 没有及时缩容的问题。

3. 弹性扩展的其他最佳实践
  • 避免使用过多的反亲和性规则。

  • 按照业务域划分 namespace 或者集群。

  • 根据规模大小,注意 Prometheus 等其他系统 Pod 的扩展问题。

  • 适时对集群进行压测,了解系统上限。

image.png

三、健壮性和灾备

我们需要在规划 Spark on Kubernetes 时,考虑 Spark 的灾备策略等问题。

在规划 VPC 时,需要根据业务负载进行长期规划,防止出现因 IP 地址耗尽,而出现计算停滞的情况。同时,在生产集群中,将重要的系统 controller 放置到托管节点组或者 Fargate 中,避免 Spark Pod 和系统 Pod 相互干扰。

同时,我们建议在规划集群时,同步规划测试集群和生产集群,方便在测试集群中相关验证。另外,可以通过多个集群实现 DR 设计,或者按照业务域规划集群,实现集群层面的业务隔离和计费统计。每个集群应该具有独立的 VPC、安全组、IAM 等,防止集群之间相互影响。

image.png

四、可观性
1. SLI/SLO 建设的必要性

Spark on Kubernetes,某些指标非常关键,比如 Pod Startup Latency 以及其他关键性指标。用户可以针对不同的作业,设置告警服务。建议大家可以参考社区 SLI/SLO【3】,进行 Spark 可观测性构建。

通过 SLI/SLO,我们可以深入了解相关 Spark 作业的健康状况,比如作业重算的情况、CPU/Memory 等基础指标。这些指标对 Spark 作业而言很重要,有时候虽然超售可以运行更多的 Pod,但是,过分的超售对 Spark 作业而言并不好,而可观测性可以帮助我们了解 Spark 作业,做到从容有度。

image.png

2. Spark History Server

可统一配置 S3 bucket 作为 history server 存储,进行统一集中管理。

image.png

3. 成本可视化

我们在对 Spark 集群进行成本优化时,需要知道成本的构成,只有清楚了解成本的构成,才可能有针对性的进行成本优化,这往往是大家忽略的一点。所以,成本可视化是成本优化的前提。

在成本可视化上,一方面可以通过亚马逊云科技的服务,比如 Cost Explorer,进行成本可视化;另外一方面,可以借助类似于 kubecost【4】 等开源项目进行。在 Kubecost 中,可以按照 namespace 纬度进行成本统计,同时,kubecost 也会给出成本优化建议,比如 right sizing 等。

在实际的生产中,有一些客户会尝试自己实现计费逻辑,比如借助 Kubernetes informers 统计相关 pod 信息。而我们在实现相关逻辑时,需要防止因代码逻辑而产生的计费偏差等问题。

image.png

五、存储

Spark Shuffle 存储的选项有很多种,比如使用本地磁盘 NVMe/SSD 的方式,以及使用外挂块存储(如 Amazon EBS),以及使用 Remote Shuffle Service 等方式进行。

image.png

1. Spark PVC reuse

Spark 运行过程中会通过 Shuffle 的方式来交换数据,Map 阶段会先将数据写到本地,然后 Reduce 阶段读取 Map 阶段产生的数据。当 Spark 运行在 Spot 实例上时,Spot 回收会导致 Map 阶段产生的数据丢失,当 Reduce 阶段读取数据时,Spark 需要重启 Map 阶段的计算,重新计算丢失的数据。据此,在 Spark 3.2 中引入了 PVC reuse 功能 [SPARK-35593] ,把 shuffle 数据保存到 PV 里,当 Spot 被回收时,可以通过复用 PVC 来恢复 Shuffle 数据,从而避免数据重算。在某些客户的实践中,整体成本降低了 39%【5】。

image.png

2. 块设备 EBS 的最佳实践

当运行大规模的 Spark 作业时,我们需要运行许多 Spark Executor Pod,每个 Pod 都需要一个独立的 PVC 用于 shuffle。有时并行创建或删除速度可能会受到 CSI API 的限制,我们可以增加 CSI 的以下值以提高效率,但下述配置并不是一步到位的,需要根据规模进行调整。

image.png

3. 存储类型的选择

根据自身业务对 IO 的要求,建议选择合适的存储,比如块设备相对于本地存储(instance store)来说具有很好的持久性,但性能可能比本地存储要低。另外,也可以考虑使用高性能共享文件系统或者 Remote Shuffle Service 来满足 shuffle 的要求。使用本地存储时,需要对一些系统目录,比如 /var/lib/kubelet 等创建单独分区并与 shuffle 盘分开。在生产环境中,我们需要建立对磁盘指标的告警机制,防止出现因异常磁盘 IO 带来的影响。

总结

Amazon EKS 是运行 Spark 负载的理想平台,这得益于亚马逊云科技的基础设施和服务广度,得益于亚马逊云科技在开源方面的投入。借助 Bottleorocket、Spot、Graviton,客户获得了性价比的提升,能够将更多精力放在自身业务上,而不是繁重的系统运维和调优上。以上就是本次分享的全部内容,希望能对大家有所帮助。

相关资源
  1. Gain Up to 58% price-performance benefits when deploying Apache Spark on AWS Graviton2 :

    Apache Spark runs better on AWS Graviton2 - Infrastructure Solutions blog - Arm Community blogs - Arm Community

  2. Bottlerocket:

    Bottlerocket

  3. Kubernetes SLI/SLO: community/sig-scalability/slos/api_call_latency.md at master · kubernetes/community · GitHub

  4. Kubecost: Kubecost | Kubernetes cost monitoring and management

  5. PVC reuse: SHAREit 大数据平台 DataCake 在 Spark on EKS 的实践 | 亚马逊AWS官方博客

文章来源:https://dev.amazoncloud.cn/column/article/663f772983b3467caf67bab8?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=CSDN
 

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

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

相关文章

AIGC (AI-Generated Content) 技术深度探索:现状、挑战与未来愿景

🔥 个人主页:空白诗 文章目录 🤖 AIGC技术:塑造未来的创意与内容革命 🌟引言 🚀AIGC技术发展现状 📈核心技术驱动 💡应用领域拓展 🌐 面临的挑战 ❌真实性与伦理考量 &am…

SAP-CentralFinance - 会计核算中的组织要素 - 学习心得1

1. 定义SAP组织架构和理解各组织架构含义 组织结构遍布SAP 系统的所有重要功能范围。FI 中最重要的组织要素是公司代码。它是“财务会计”中的最小组织单位,可以为其编制自主式完整科目集供外部报告使用。其他重要的组织要素是利润中心业务范围和段。您可以为各个利润中…

大模型微调之 在亚马逊AWS上实战LlaMA案例(十)

大模型微调之 在亚马逊AWS上实战LlaMA案例(十) 训练数据集格式 SageMaker JumpStart 目前支持域适应格式和指令调整格式的数据集。在本节中,我们指定两种格式的示例数据集。有关更多详细信息,请参阅附录中的数据集格式化部分。 …

iview(viewUI) span-method 表格实现将指定列的值相同的行合并单元格

效果图是上面这样的&#xff0c;将第一列的名字一样的合并在一起&#xff1b; <template><div class"table-wrap"><Table stripe :columns"columns" :data"data" :span-method"handleSpan"></Table></div&…

HDFS- DataNode磁盘扩缩容

HDFS- DataNode磁盘扩缩容 背景: 缩减/增加节点磁盘 方案介绍: 采用hdfs dfsadmin -reconfig 动态刷新配置实现,不停服扩缩容。 注意事项: 请在进行缩容之前,务必了解实际的数据量,并确保磁盘有足够的空间来容纳这些数据。还需要考虑未来的使用需求,要预留一定数量的空间…

java+vue3+iclientol实现警务地理信息系统实践

警务地理信息系统&#xff08;Police Geographic Information System, PGIS&#xff09;是一种专为警务工作设计的地理信息系统&#xff0c;它结合了地理信息技术、数据库技术、网络技术和现代警务理念&#xff0c;旨在提升公安机关的空间数据分析、决策支持、指挥调度、案件管…

【QVariant类型剖析】

QVariant类型剖析 &#x1f31f; 官方文档中给出的定义&#x1f31f; 特性&#x1f338;QVariant实战应用&#x1f338;项目成果展示 &#x1f31f; 官方文档中给出的定义 &#x1f4d8;Because C forbids unions from including types that have non-default constructors or…

基于springboot+vue+Mysql的外卖点餐系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟

你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟 文章目录 你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟一、概述二、CallerMemberNameAttribute类三、CallerFilePathAttribute 类四、CallerLineNumberAttribute 类…

Android 简单的下拉选择框实现

要实现这种效果,目前知道的方法有以下两种,Spinner 和 ListPopupWindow,当然肯定还有很多别的方法,这里我们先尝试使用ListPopupWindow来实现这个效果; 以下是一个简单的demo: public class MainActivity extends AppCompatActivity {private List<String> dataList;pr…

QueryPerformanceCounter实现高精度uS(微妙)延时

参考连接 C# 利用Kernel32的QueryPerformanceCounter封装的 高精度定时器Timer_kernel32.dll queryperformancecounter-CSDN博客https://blog.csdn.net/wuyuander/article/details/111831973 特此记录 anlog 2024年5月11日

ubuntu安装oceanbase调通本地navicat链接

分为两部分 一安装oceanbase服务 准备工作 mkdir -p /data/1 /data/log1 chown -R admin.admin /data/1 /data/log1/偷偷说&#xff1a;其实这步我忘记执行&#xff0c;也没影响我安装 oceanbase程序是很占内存的在安装时我们要先下载好安装包&#xff1a; 然后放在能记住的…

【C语言】/*操作符(上)*/

目录 一、算数操作符&#xff1a;、-、*、/、% 1.1 和 - 1.2 * 1.3 / 1.4 % 二、赋值操作符&#xff1a; 和符合赋值 2.1 连续赋值 2.2 复合赋值(自操作) 三、单目操作符&#xff1a;、--、(正号)、-(负号) 3.1 和 -- 3.1.1 前置 3.1.2 后置 3.1.3 前置-- …

稳定网络的诀窍:静态住宅代理解决方案

在数字化时代&#xff0c;网络稳定性对于个人和企业都至关重要。然而&#xff0c;由于多种因素的影响&#xff0c;如地理位置、网络拥堵或网络安全问题等&#xff0c;网络稳定性常常受到挑战。为了应对这些挑战&#xff0c;静态住宅代理作为一种高效且可靠的网络解决方案&#…

C++容器——list

目录 list容器 list容器使用流程 加入头文件 定义 list容器的使用 添加元素&#xff1a; 删除元素&#xff1a; 访问元素&#xff1a; 容器大小&#xff1a; 迭代器操作&#xff1a; 其他操作&#xff1a; list容器 功能&#xff1a;将数据进行链式存储 链表(list…

kali linux2024.1版安装

1 基于 VMware 安装 Kali 系统 打开已经安装好的 VMware 程序&#xff0c;点击选项卡中的“主页”--》而后点击“创建新的虚拟机” 选择“典型(推荐)”&#xff0c;并点击“下一步” 客户机操作系统镜像选择&#xff1a;选择“稍后安装操作系统”&#xff0c;并点击“下一步”…

《中阿科技论坛(中英文)》是什么级别的期刊?是正规期刊吗?

问题解答 问&#xff1a;《中阿科技论坛&#xff08;中英文&#xff09;》是核心期刊吗&#xff1f; 答&#xff1a;不是&#xff0c;但是正规期刊 问&#xff1a;《中阿科技论坛&#xff08;中英文&#xff09;》是什么级别期刊&#xff1f; 答&#xff1a;省级 主管单位…

转转小程序数据处理

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872&#xff0c;x30184483x…

BUU-[GXYCTF2019]Ping Ping Ping

考察点 命令执行 题目 解题 简单测试 ?ip应该是一个提示&#xff0c;那么就测试一下?ip127.0.0.1 http://0c02a46a-5ac2-45f5-99da-3d1b0b951307.node4.buuoj.cn:81/?ip127.0.0.1发现正常回显 列出文件 那么猜测一下可能会有命令执行漏洞&#xff0c;测试?ip127.0.…

dos命令改3389端口,通过dos命令更改3389端口的操作

要使用DOS命令更改3389端口&#xff0c;通常涉及修改Windows注册表中的相关键值。请注意&#xff0c;直接操作注册表具有一定的风险&#xff0c;因此在进行任何更改之前&#xff0c;请确保您了解正在进行的操作&#xff0c;并已经采取了适当的备份措施。 以下是一个基本的操作步…