加入收藏 | 设为首页 | 会员中心 | 我要投稿 揭阳站长网 (https://www.0663zz.cn/)- 机器学习、行业智能、决策智能、云计算、AI应用!
当前位置: 首页 > 大数据 > 正文

Spark研究笔记:核心概念可视化

发布时间:2021-06-05 10:24:46 所属栏目:大数据 来源:互联网
导读:对于在分布式系统上背景知识较少的人来说,学习Spark并非易事。 即使我已经使用Spark已有一段时间了,但我发现全面了解Spark中的所有核心概念仍然很耗时。 Spark的官方文档提供了非常详细的解释,但更多地侧重于实际编程方面。 同样,大量的在线教程可能会让
对于在分布式系统上背景知识较少的人来说,学习Spark并非易事。 即使我已经使用Spark已有一段时间了,但我发现全面了解Spark中的所有核心概念仍然很耗时。 Spark的官方文档提供了非常详细的解释,但更多地侧重于实际编程方面。 同样,大量的在线教程可能会让您不知所措。 因此,在本文中,我想以更直观的方式记下那些Spark核心概念。 希望您也会发现它有用!
注意:也许您已经对Hadoop有一定的了解,所以我将跳过对琐碎事物(例如节点和集群)的解释。
Spark架构和部署模式
简而言之,Spark在主工作架构上运行,这是并行任务计算模型的典型类型。 运行Spark时,我们可以选择几种模式,即本地(主,执行器,驱动程序都在同一台JVM机器中),独立,YARN和Mesos。 在这里,我们仅谈论YARN上的Spark以及YARN客户端和YARN群集之间的区别,因为两者都是最常用的,但非常令人困惑。
下两张图片说明了两种模式的设置。 它们看起来很相似,不是吗? 但是,通过查看橙色突出显示的部分,您可能会注意到细微的差别,这就是Spark驱动程序的位置。 这基本上是两种模式之间的唯一区别。
Spark学习笔记:核心概念可视化
Spark学习笔记:核心概念可视化
> Fig 1. Spark deployment mode YARN-client (left) and YARN-cluster (right)
假设您编写了一个名为spark_hello_world.py的Spark应用程序。 在客户端模式下,使用spark-submit执行python文件时,驱动程序直接在spark-submit进程内启动,因此它将与spark_hello_world.py驻留在同一台计算机上。 初始化Spark上下文时,本地计算机中的驱动程序将连接到群集中的应用程序主机。 从主机开始,Spark启动了更多执行器。
在群集模式下,spark_hello_world.py代码位于客户端计算机中,而客户端计算机不在群集中。 执行应用程序python代码时,它将在集群中的一个节点中启动驱动程序。 与Spark应用程序主文件一起,它可以启动执行程序并发布应用程序命令。
鉴于设置差别不大,您一定想知道为什么我们需要两种不同的模式。 在实践中,这与客户端计算机与工作计算机在物理上位于同一位置有关。 如果客户端计算机离工作节点"遥远",例如 您在笔记本电脑上编写了spark_hello_world.py,但是工作程序是AWS EC2实例,那么使用群集模式是有意义的,以便最大程度地减少驱动程序和执行程序之间的网络延迟。 在另一种情况下,如果您的python文件位于与工作节点"非常近"的网关计算机中,则客户端模式可能是一个不错的选择。
Spark学习笔记:核心概念可视化
执行者
现在,我们了解了Spark集群的设置,让我们放大到Spark中最重要的元素之一-执行器。 执行器是运行任务并将数据跨任务存储在内存或磁盘中的过程。
浏览Spark文档时,您可能会对与执行程序相关的可配置参数数量感到惊讶。 让我们从视觉上看一下它,而不是一次又一次地尝试弄清楚一个人的多个参数之间的关系。
Spark学习笔记:核心概念可视化
> Fig 2. Spark executor internals
如图2所示,在每个执行器中都有一个执行器JVM,用于存储RDD分区,缓存的RDD分区,运行内部线程和任务。 如果内核数量超出任务要求,则JVM中还将有可用的内核。 这个执行器JVM的绿色块将成为我们研究执行器中的内存管理的起点。
执行程序内存管理
在执行程序容器中,主要分配了两个内存块:内存开销和执行程序内存。
内存开销是为虚拟机开销,内部字符串,其他本机开销等内容预留的堆外内存。通过将数据缓存在主要Java堆空间之外但仍在RAM中的方式,堆外内存可使高速缓存克服冗长的时间 使用大堆大小时,JVM垃圾收集会暂停。
执行器的内存包括以下三个部分。
预留内存
用户内存:用于在Spark中存储用户数据结构和内部元数据等内容。
存储和执行内存:用于存储所有RDD分区并为任务分配运行时内存。
图3显示了每个存储块的相关参数。 假设我们将spark.executor.memory设置为4 GB,那么Spark将向资源管理器请求总共4.4 GB的内存。 在4 GB的执行程序内存中,我们实际上获得了3.7 GB,因为其余部分已保留。 默认情况下,我们获得2.2 GB(0.6 * 3.7)作为执行+存储内存。 其中1.1 GB用于存储RDD等存储空间,其余空间用于执行内存。

(编辑:揭阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读