AI图鉴

AI图鉴首页 › AI 资讯 › 你跑火花任务时会发生什么?

你跑火花任务时会发生什么?

来源:Unite.AI · 发布时间:10-23 · 由 AI图鉴每小时自动聚合

导言随着数据集的增长,由于CPU容量,内存和存储Th的限制,在单机上高效处理它们可能会变得具有挑战性。

AI 基本要素

你跑火花任务时会发生什么?

在 Google 上的首选来源中添加 Unite.AI

导言

随着数据集的增长,由于CPU容量,内存和存储吞吐量的限制,在单机上高效处理它们会变得具有挑战性。

Apache Spark通过提供分布式数据处理引擎来应对这些挑战,该引擎可以将工作量划分为分区,并同时执行跨CPU核心和多个机器的任务。

然而,Spark不仅仅是要增加更多的机器。

了解其各组成部分——司机、执行者、区域数据数据库、数据库、分区、工作、阶段和任务——如何合作,对于设计有效和可靠的数据管道至关重要。

在文章中,我会用一个实用的电子商务销售汇总例子

1. 为什么Apache Spark - 并行数据处理

Apache Spark是一个分布式计算引擎,为大规模数据处理和数据工程设计。

Spark 处理利用并行数据处理的大数据:

与单一节点处理(右,图A)相比,Spark将工作分成使用多个节点的任务,在有资源时,在机器之间执行。

在这里,分布并不意味着多个机器是强制性的。 Spark可以在单机上以局部模式运行。 即使在那里,数据也可以平行分割和处理。

2. 核心Apache Spark架构

Spark由几个关键组件组成:

- Spark驱动程序(驱动程序):Spark应用程序的中央协调进程。

- 集群管理器:一个负责分配CPU核心和内存等硬件资源的外部服务。

- 工人节点(worker):一个物理/虚拟机或计算集群中的节点。

- 执行者:在工人节点上分配工人加工发布。

- Java虚拟机(JVM):执行 Spark 字节代码所需的运行时间环境( 因为 Spark 写于 Scala/ Java )。

首先,驱动程序协调一个Spark应用程序,并将其转换为物理执行任务的定向循环图(DAG),并把它们排到执行者之间。

然后,群组管理员根据部署的资源管理系统分配资源。

工作节点为执行者提供计算资源,执行者在执行任务时执行任务并保存数据。

一些管理环境如Databricks使用每个工人一个执行人,但这不是通用的Spark规则。 工人可以根据组群配置,托管多个执行器。

2-1. 电子商务使用案例-输入数据结构

让我们想象一下一家精品电子商务公司。

该公司有1万份销售记录,每份都有库存股和销售数量。 假设三种可能的SKU:A,B和C.

表1. 电子商务销售记录细目和预期汇总实例。

我们的目标是计算每个SKU销售的总有效单位:

- 过滤记录谁的Qty QQ0,然后

- SKU的汇总样本。

在说明性完整的数据集中,假设在过滤后,10 000份记录中仍有9 800份保留。 Spark预计最终总数为:

[("A", 8000), ("B", 10500), ("C", 9200)]

2-2. 火花组

我将定义一个简化的集群

工人节点(工人)

我将设置3个工人节点,每个节点都有8个vCPU的例型

该系统总共提供了24个VCPU。

Spark 执行器和CPU/记忆分配

我将保证:

- 7名执行人。

- 每名执行员2个vCPU核心。

- 3GiB JVM堆积每个执行者的记忆。

Spark应用程序要求集群管理器将资源分配给这7名执行者。

然后,集群管理者根据每个工人的资源使用情况决定CPU和内存分配。

例如,它决定创建14个任务槽 – 每个执行者 2 vCPU 核心 x 7 执行者:

请注意,分配给执行者的3 GiB内存并不是其全部内存,因为它必须保证工人的内存管理费和其他处决。

假设单项任务需要1 vCPU(spark.task.cpus = 1),每个工人分配其 vCPU:

此显示两个关键点:

每个工人都有其独特的CPU使用率(在图C-2中,工人A的使用率为75%,而工人B和C仍然是50%)。

- 尽管该系统有24个vCPU核心(8个vCPU/工人x3个工人),但只能使用14个vCPU核心;其余10个仍然未用于这些任务。

2-3. Java虚拟机(JVM)在Spark后面

Apache Spark在Java虚拟机(JVM)上构建。

JVM 是执行 Spark 字节代码所需的运行时环境。

因为Spark在斯卡拉/贾瓦写道:

- 在应用中使用Scala或Java时:代码在JVM内部本土运行。

- 当使用PySpark(Python):一个Python进程运行代码,但它通过像Py4J这样的桥梁与基于JVM的驱动程序进行通信。 工人节点上的Spark执行器仍然运行在一个JVM内部,然后管理Python工人执行Python代码和Python用户定义函数(Python UDFs).

无论在哪种情况下,JVM管理执行线程,内存分配,以及对驱动器和执行器的垃圾收集。

PySpark 应用程序中的驱动程序( E) JVMs

在PySpark应用程序中,Python驱动程序与运行在JVM中的Spark驱动程序进行通信;

- Python驱动程序:应用程序级的PySpark代码被写入和执行的地方。

- 驾驶员JVM:坐标Spark执行和调度。

- 执行者JVM:运行Spark任务并管理执行资源。 当任务需要Python执行时,涉及Python工人过程。

- 客户端JVM(客户流程或提交机):JVM运行于本地机上或边缘/通道节点。

如图所示,客户端JVM首先与驱动程序JVM连接,后者随后与执行者JVMs协调:

从这里开始,驱动程序JVM托管Spark Driver来管理应用程序,而执行者JVMs托管负责执行这些任务的单个执行者。

每个JVM驱动程序都有JVM堆积,可以高效地处理数据处理,缓存,以及用户对象。

2-4. 弹性分布数据集(RDD)深潜

一个可逆分布的数据集(RDD)是Spark可以并行处理的元素的不可改变,分割的集合。

RDDs跟踪变换之间的依赖性,使得Spark能够在许多失败情景中重算丢失的分区。

名称抓取三个属性:

- 耐火性:Spark记录线条——RDD取决于以前的RDD——并经常可以重建缺失的分区,而不是维持每个中间结果的复制品。

- 分布:数据集作为Spark可能在不同执行器上处理的分区表示。 不需要多个物理机器;本地模式也支持RDD.

- 数据集:RDD可以包含密钥值对,整数,字符串,扭矩,以及其他支持的元素——不仅仅是关系行。 RDD API包括地图,过滤器,减少ByKey,加入,以及聚合ByKey等操作。

RDD是逻辑的集合和计算抽象,而不是声明特定分区永久分配给特定工人。

分区

一个分区是数据的一个逻辑块,通常对应一个阶段中的一个任务。

我们创造100个分区(这些100个分区是明确的教学选择)

拥有10,000个源元素,如果输入分配大致均匀,则每个分区给出约100个元素:

3. RDD API vs DataFrame API:内部催化剂优化

最初的RDD示例帮助理解世系,分区和洗涤。

然而在典型的结构化ETL中,DataFrame API是首选的起点,因为它提供了列,schema信息,SQL类似表达式,以及优化的可见操作。

下图说明这种关系:

就像RDD有RDD线程来定义变换,DataFrame查询计划代表其结构化查询。

Spark从依赖和物理操作符构建执行工作。

DataFrame执行可能内部使用基于RDD的机制,但这并不意味着用户在写入DataFrame代码时需要手动构建RDD行。

3–1. 数据Frame查询计划

一个DataFrame查询计划是执行引擎生成的逻辑和物理步骤的顺序(图L中的purple框).

DataFrame 查询通过多个表达式移动:

- 逻辑计划:对请求的操作(扫描、过滤、组、聚合)的说明。

- 分析并优化逻辑计划:Spark 解决引用并应用适用的逻辑优化,如列普run或上游推倒。

- 物理计划:Spark选择可执行运算符,例如扫描、部分/最终聚合、交换、加入和类型。

- 执行:实际计划采用Spark的执行机制,最终涉及执行人的任务。

在我们的使用情况下,物理计划可以包括以下步骤:

- 部分散列聚合

- SKU的交换

- 最终散列集合。

3-2. 比较动作:RDD API对 DataFrame API

让我们比较RDD API和DataFrame API,以SKU汇总为例。

RDD API 软件

元素为(sku,qty)对。 我们的 Python 聚合逻辑是明确的,Spark 遵循 RDD 依赖性:

结果 rd=(

原始编号

.filter(lambda 行:行[1] > 0)

减少ByKey(lambda a, b: a + b, nummPartities=4)

)

rd 结果=结果 rd.collect ()

# 实例:

# [('A', 8000), ('B', 10500), ('C', 9200)]

数据Frame API

假设销售 df有列sku(字符串)和qty(数字):

从 pyspark.sql 导入函数为 F

结果 df=(

销售 df

.filter(F.col("qty") > 0)

. groupBy ("sku") (中文(简体) ).

.agg(F.sum("qty").alias("total_qty"))

)

df 结果=结果 df.collect ()

# 实例:

# [Row(sku='A',共计 qty=8000) #

(sku='B',共计 qty=10500)

(sku='C',共计 qty=9200)].

在这里,这两个例子解决了同样的商业问题:

按 SKU 过滤无效销售记录并汇总有效数量。

在这两种情况下,收集()触发Spark执行,并将所有产生的记录退回给驱动程序。

这里的关键区别在于结果表述:

- RDD API:返回 Python 元素,如( sku, total qty) tuples。

- DataFrame API:回归结构带有命名字段的行对象,如 sku 和 total qty。

以下是RDD和DataFrame API的总体比较:

表2. RDD API vs. DataFrame API – 特征和抽象比较:(由Kuriko IWAI创建)

4. 包装

Spark调制的目的不是将分区计数或CPU的使用独立最大化。

这是在不造成不稳定的情况下,减少端到端的执行成本和延迟。

在本篇文章中,我们了解了该系统的核心关系:

- 资源:工人主机执行器;执行器运行任务;配置了CPU和内存限制的货币。

- RDD编程:转型产生不可变的RDD定义和线程;动作触发计算。

- DataFrame编程:转型产生逻辑查询操作;优化选择可执行的物理运算符;动作触发计算。

- 执行:Spark将工作组织成工作、阶段和任务,以及执行者的任务处理分区。 分散和其他依赖性在各阶段之间形成了协调的界限。

了解Spark如何执行分配的工作量只是基础。

可以使用RDD API学习七步计算流程。

本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。

相关 AI 工具

VoiceWarp

VoiceWarp 是免费的浏览器语音工具,支持录音、音频和视频的实时音效处理,以及文本转语音后应用角色音效

Dataify

数据采集API、高质量数据集、代理资源服务一体化供应

PubMedQA

生物医学研究问答数据集和模型得分排行榜

Tale

Tale 是开源的人机协作项目工作空间,可让团队与 AI agents 共享任务、文件和对话,委派工作并审查

相关免费羊毛

Modal

Modal 每月 $30 免费 GPU/CPU 额度

百度 AI Studio

每天免费 8 算力点(V100 可跑约 16 小时)

腾讯云 Cloud Studio

每月 10000 分钟免费 GPU(T4 16G)

DigitalOcean

DigitalOcean 新客 $200 / 60 天试用

同源资讯

波兰研究所 NASK, OpenAI 关于AI安全工作的接触交易

Unite.AI · 10-23

NVIDIA 详细情况哈萨克斯坦 GPU 部署和机器人计划

Unite.AI · 10-23

阅读原文(unite.ai)

标题、摘要与正文均来自该信源的公开页面,版权归原作者所有;本站自动聚合与翻译,仅作出处跳转。

← 返回 AI 资讯列表AI工具图鉴首页

返回 AI图鉴首页 · 提交工具 · 商务合作 · 关于本站 · 588 款 AI 工具分类导航 · 每日 AI 热门项目与动态