spark 面试题
spark 面试题
1、spark 任务如何解决第三方依赖
比如机器学习的包,需要在本地安装?--py-files
添加 py、zip、egg
文件不需要在各个节点安装
2、spark 数据倾斜怎么解决
spark
中数据倾斜指的是 shuffle
过程中出现的数据倾斜,主要是由于 key
对应的数据不同导致不同 task
所处理的数据量不同。
例如,reduce
点一共要处理100万条数据,第一个和第二个task
分别被分配到了1万条数据,计算5分钟内完成,第三个task
分配到了98万数据,此时第三个task
可能需要10个小时完成,这使得整个Spark
作业需要10个小时才能运行完成,这就是数据倾斜所带来的后果。
数据倾斜的表现:
-
Spark
作业的大部分task
都执行迅速,只有有限的几个task执行的非常慢,此时可能出现了数据倾斜,作业可以运行,但是运行得非常慢 -
Spark
作业的大部分task
都执行迅速,但是有的task在运行过程中会突然报出OOM
,反复执行几次都在某一个task
报出OOM
错误,此时可能出现了数据倾斜,作业无法正常运行
定位数据倾斜问题:
-
查阅代码中的
shuffle
算子,例如reduceByKey、countByKey、groupByKey、join
等算子,根据代码逻辑判断此处是否会出现数据倾斜 -
查看
Spark
作业的log
文件,log
文件对于错误的记录会精确到代码的某一行,可以根据异常定位到的代码位置来明确错误发生在第几个stage
,对应的shuffle
算子是哪一个
3、spark Driver和Executor
在执行 Spark
的应用程序时,Spark
集群会启动Driver
和Executor
两种JVM
进程,
-
Driver
:负责创建spark
上下文,提交spark
作业job
,并将作业转换为计算任务task
,在各个Executor
进程间协调任务的调度 -
Excutor
:负责在工作节点执行具体的计算任务,并将结果返回给Driver
,同时为需要持久化的RDD
提供存储功能
4、spark 堆内和堆外内存
spark
内存管理中,涉及到的堆内内存(On-heap Memory
)和堆外内存(Off-heap Memory
) 两种,因为 Driver
的内存管理相对简单,因此下面说的内存特指的 Excutor
端的内存
Excutor
作为一个 JVM
进程,其内存管理建立在 JVM
内存管理之上,Spark
对 JVM
的堆内空间进行更为详细的分配,以便充分利用内存。同时也引入了堆外内存,使之可以直接在工作节点的系统内存中开辟空间,进一步优化了内存的使用。
堆内内存的大小,由Spark
应用程序启动时的–executor-memory
或spark.executor.memory
参数配置
堆内内存分区
Excutor
堆内内存主要可分为四大块:
-
Excutor
内存:主要用于shuffle、join、sort、aggregation
等计算过程中的临时数据 -
Storage
内存:主要用于存储cache
数据,如:rdd
的缓存、unroll
数据 -
用户内存
User Memory
:主要用于存储rdd
转换操作需要的数据,如:rdd
依赖等信息 -
预留内存
Reserved Memory
:系统预留内存,用于存储spark
内部对象,防止 OOM,因为spark
堆内内存大小记录是不准确的,需要留出保险区域(在 Spark 2.2.1 中是写死的,其值等于 300MB,这个值是不能修改的)
# systemMaxMemory 取决于当前 JVM 堆内内存大小,其实就是通过 spark.executor.memory 或 --executor-memory 配置的 可用的存储内存 = systemMaxMemory * spark.storage.memoryFraction * spark.storage.safety Fraction 可用的执行内存 = systemMaxMemory * spark.shuffle.memoryFraction * spark.shuffle.safety Fraction usableMemory = systemMemory - reservedMemory,这个就是 Spark 可用内存
堆外内存
堆外的空间分配较为简单,只有存储内存和执行内存。
可用的执行内存和存储内存占用的空间大小直接由参数 spark.memory.storageFraction
决定,由于堆外内存占用的空间可以被精确计算,所以无需再设定保险区域
spark.memory.offHeap.enabled true spark.memory.offHeap.size 10737418240
两者区别
内存类别 | 区域划分 | 管理方式 | 优缺点 |
---|---|---|---|
on-heap | Execution Memory、Storage Memory、User Memory、Reserved Memory | 使用 JVM 管理 | |
off-heap | Execution Memory、Storage Memory | 手动管理,不经过JVM | 可以避免频繁的 GC 但是必须自己编写内存申请和释放的逻辑 |
参考: Spark内存管理之堆内/堆外内存原理详解
5、spark 血缘关系
父子 rdd
的构建存在依赖关系,通过这种依赖关系可以实现 rdd
的容错,多个连续 rdd
的依赖关系成为血缘关系
每个 rdd
不会保存数据,但会保存血缘关系,若当前 rdd
在计算过程中出现错误,可以根据其保存的血缘关系将数据源重新读取进行计算
参考:Spark 之RDD血缘关系
6、spark 宽窄依赖
窄依赖
若依赖关系在设计时即可确定,不需要考虑父 rdd
分区中的记录,且父 rdd
中的每个分区最多只有一个子分区
-
父
rdd
的每个分区最多被一个子rdd
的分区使用 -
子
rdd
中的分区要么只依赖一个父rdd
中的一个分区(如:map、filter
操作) -
要么就是在设计时就能确定子
rdd
是 父rdd
的一个子集(如:coalesce
) -
窄依赖的转换可以在任何的的一个分区上单独执行, 而不需要其他分区的任何信息
宽依赖
-
父
rdd
的分区被多个子rdd
的分区依赖即为宽依赖 -
宽依赖计算时不能随意在某些记录一运行,而是需要使用特殊的方式(如:按照
key
来获取分区中的所以数据) -
如:在排序
sort
时,数据必须被分区,同样范围的key
必须在同一分区 -
具有宽依赖的
transform
操作包括:sort、reduceByKey、groupByKey、join
和调用reParation
函数的任何操作
7、常见的 transform和action 操作
-
transform
:-
map(func)
: 返回一个新的rdd
,其结果由每一个输入元素经过func
函数处理后组成 -
mapPartition(func)
:类似于map
,但独立地在rdd
每个分片一运行。假设有 n 个元素,m 个分区,map
的函数将被调用n
次,而mapPartition
被调用m
次,一次处理所有分区 -
flatMap(func)
:对集合中每个元素进行操作然后再扁平化 -
filter(func)
:返回一个新的rdd
,rdd
中每个元素会经过func
函数的逻辑进行过滤 -
reduceByKey(func, [numTask])
:在一个(K,V)
的RDD
上调用,返回一个(K,V)
的RDD
,使用reduce
函数将相同key
的值聚合在一起,reduce
任务的个数可以通过第二个参数设置
-
-
action
:first、count、collect、saveAsTextFile、take、foraech、countByKey
8、spark 有几种部署方式
-
Local:运行在一台机器上,通常用来练手或者测试
-
Standalone:基于
Master + Slaves
的资源调度集群,spark
任务提交给Master
运行,是spark
自身的一个调度系统 -
Yarn:有
yarn-client、yarn-cluster
两种模式,主要区别在于Driver
程序的运行节点,Spark
客户端直接连接Yarn
,不需要额外构建Spark
集群 -
Mesos:国内大环境比较少用
相关文章:
spark 面试题
spark 面试题 1、spark 任务如何解决第三方依赖 比如机器学习的包,需要在本地安装?--py-files 添加 py、zip、egg 文件不需要在各个节点安装 2、spark 数据倾斜怎么解决 spark 中数据倾斜指的是 shuffle 过程中出现的数据倾斜,主要是由于…...

青柠视频云——如何开启HTTPS服务?
前言 由于青柠视频云的语音对讲会使用到HTTPS服务,这里我们说一下如何申请证书以及如何在实战中部署并且配置使用。 一、证书申请 1、进入控制台 我们拿阿里云的免费个人证书为例,首先登录阿里云,在控制台找到数字证书管理服务,进…...

2016年国赛高教杯数学建模A题系泊系统的设计解题全过程文档及程序
2016年国赛高教杯数学建模 A题 系泊系统的设计 近浅海观测网的传输节点由浮标系统、系泊系统和水声通讯系统组成(如图1所示)。某型传输节点的浮标系统可简化为底面直径2m、高2m的圆柱体,浮标的质量为1000kg。系泊系统由钢管、钢桶、重物球、…...

vue-使用refs取值,打印出来是个数组??
背景: 经常使用$refs去获取组件实例,一般都是拿到实例对象,这次去取值的时候发现,拿到的竟然是个数组。 原因: 这是vue的特性,自动把v-for里面的ref展开成数组的形式,哪怕你的ref名字是唯一的!…...

微服务_入门1
文章目录 一、 认识微服务二、 微服务演变2.1、 单体架构2.2、 分布式架构2.3、 微服务2.4、 微服务方案对比 三、 注册中心3.1、 Eureka3.2、 Nacos3.2.1、服务分级存储模型3.2.2、权重配置3.2.3、环境隔离 一、 认识微服务 二、 微服务演变 随着互联网行业的发展,…...

【学习资料】袋中共36个球,红白黑格12个,问能一次抽到3个红4个白5个黑的概率是多少?
1、公式计算 1.1 题目1 袋中共 36 36 36个球, 红 \fcolorbox{red}{#FADADE}{\color{red}{红}} 红 白 \fcolorbox{white}{#808080}{\color{white}{白}} 白 黑 \fcolorbox{#808080}{#0D0D0D}{\color{#808080}{黑}} 黑各 12 12 12个,问能一次抽到 3…...
@PathVariable,@RequestParam,@RequestBody注解,springboot与前端请求之间的数据类型转换
前端数据与springboot java数据类型转换 springboot&mybatis中数组和字符串数据类型的转换-CSDN博客中曾经提到,在Spring Boot中,通过URL传参、payload中的key-value形式或json形式,将前端数据以字符串格式发送到后端,后端We…...
在Python中优雅地打开和操作RDS
在Python中优雅地打开和操作RDS 随着数据存储需求的不断增长,关系数据库服务(Relational Database Service, RDS)成为了许多企业首选的数据存储方式。那么,在Python中如何轻松地与RDS进行交互呢?以下是一份详尽的指南…...

.whl文件下载及pip安装
以安装torch_sparse库为例 一、找到自己需要的版本,点击下载。 去GitHub的pyg-team主页中找到pytorch-geometric包。网址如下: pyg-team/pytorch_geometricgithub.com/pyg-team/pytorch_geometric 然后点击如图中Additional Libraries位置的here&am…...

望繁信科技受邀出席ACS2023,为汽车行业数智化护航添翼
2023年5月25-26日,ACS2023第七届中国汽车数字科技峰会在上海成功举行。此次峰会汇聚了众多汽车领域的顶级专家、产业链代表及企业高管,共同探讨当今汽车产业的转型与未来发展趋势。 作为唯一受邀的流程挖掘厂商代表,望繁信科技携最新行业优势…...

基于 C语言的 Modbus RTU CRC 校验程序
一、CRC校验原理 Modbus RTU是一种常用于工业设备通信的协议,它基于串行通信,如RS-232或RS-485。在Modbus RTU中,CRC(循环冗余校验)是一种常用的错误检测机制,用于确保数据在传输过程中的完整性和准确性。 …...

基于微信小程序的剧本杀游玩一体化平台
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的剧…...
AMD或Intel上编译出来的程序,可以跑在海光上吗?
在上一篇博文《海光处理器与AMD Zen1的指令差异-CSDN博客》中发现,海光相比AMD,缺失了一些指令集。 那么在AMD或Intel上编译出来的程序,可以跑在海光上吗? 这个问题的关键,在于编译器默认使用哪些指令来编译程序。以Ce…...

ChatGPT 4o 使用指南 (9月更新)
首先基础知识还是要介绍得~ 一、模型知识: GPT-4o:最新的版本模型,支持视觉等多模态,OpenAI 文档中已经更新了 GPT-4o 的介绍:128k 上下文,训练截止 2023 年 10 月(作为对比,GPT-4…...

微信getUserProfile不弹出授权框
当我们在微信小程序开发工具中想要使用getUserProfile来获取个人信息的时候,会发现不弹出授权框,这是什么原因呢? 早在2022年的小程序官方公告中就已经明确给出了小程序用户头像昵称获取规则调整公告 因此如果还想继续使用getUserProfile的弹…...
iostat 命令:系统状态监控
一、命令简介 iostat 命令用于报告系统中 CPU、磁盘、tty 设备和 CPU 利用率统计信息。 需安装 sysstat 软件包,该软件包提供了一组工具,包括 iostat、sar、mpstat 等,用于系统性能监控和报告。 二、命令参数 iostat…...
从底层原理上解释 ClickHouse 的索引
ClickHouse 是一款高性能的列式数据库,它通过列式存储、稀疏索引、MergeTree 引擎等技术实现了极高的查询效率和吞吐量。索引是数据库中提高查询效率的关键机制之一。为了深入了解 ClickHouse 中的索引实现机制,我们将从底层原理、关键数据结构以及 Clic…...
9.20-使用k8s部署wordpress项目
部署wordpress项目 部署mariadb # 启动docker进程systemctl start docker# 拉取三个镜像docker pull nginx:alpinedocker pull wordpress:latestdocker pull mariadb:latest# 保存三个镜像cddocker save -o wordpress.tar wordpress:latestdocker save -o mariadb.tar…...

OSPFv3协议几类LSA介绍
OSPFv3协议介绍 与OSPFv2相比,OSPFv3在工作机制上与OSPFv2基本相同;但为了支持IPv6地址格式,OSPFv3对OSPFv2做了一些改动。OSPFv3基于OSPFv2基本原理增强,是一个独立的路由协议(v3不兼容v2)协议号仍然是89…...

煤矿智慧矿井数据集 (1.煤矿采掘工作面智能分析数据集2.煤矿井下钻场智能分析数据集 )
智慧矿井智能分析数据集 数据1:数据1包含煤矿采掘工作面工人安全帽检测,工人行为检测(行走,站立,坐,操作,弯腰,靠,摔,爬),液压支撑防护…...
举例说明协方差的数学公式计算步骤以及皮尔逊相关系数数学公式的计算步骤
例子:协方差的计算步骤 协方差是用于衡量两个随机变量之间的线性相关性的统计量。它表示两个变量如何一起变化。如果协方差为正,表示两个变量倾向于同方向变化;如果为负,表示它们倾向于反方向变化。 下面我们将通过一个具体的例…...
2024/9/16论文赏析(均为1区或顶刊
Labeled-to-Unlabeled Distribution Alignment for Partially-Supervised Multi-Organ Medical Image Segmentation 代码链接:GitHub - xjiangmed/LTUDA 论文链接:Labeled-to-Unlabeled Distribution Alignment for Partially-Supervised Multi-Organ …...

IDEA 2024.3 EAP新特征早览!
0 前言 IntelliJ IDEA 2024.3 第一个 EAP 版本已发布,提前体验 下一个重大版本的一部分改进。 持续关注 EAP 更新,未来几周内将推出更多 IntelliJ IDEA 新功能。尝试这些新功能,分享您的反馈,共同完善 IDE。 1 AI 助手 1.1 内…...
如何在安卓設備上更換IP地址?
IP地址是設備在網路中的唯一標識,通過IP地址,網路能夠識別並與設備進行通信。本文將詳細介紹在安卓設備上更換IP地址的幾種方法。 在安卓設備上更換IP地址的方法 1. 使用Wi-Fi網路更換IP地址 最簡單的方法是通過Wi-Fi網路更換IP地址。步驟如下&#x…...

LINUX网络编程:TCP(1)
目录 1.认识Tcp的报头 2.确认应答机制(ACK) 序号与确认序号 捎带应答 3.超时重传机制 4.Tcp连接管理 三次握手 为什是三次握手 四次挥手 理解TIMEWAIT 1.认识Tcp的报头 源端口和目的端口号没什么说的 32位的序号和确认序号,之后会介…...

基于PHP的新闻管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的新闻管理系统。…...

6.C++程序中的基本数据类型
数据类型是指在C中用于声明不同类型变量或函数的一个系统或抽象或者是一个分类,它决定了变量存储占用的内存空间以及解析存储的位模式。其实数据类型可以理解为固定内存大小的别名,是创建变量的模具,具体使用哪种模具(包括自定义&…...
oracle 11g写一个判断是否是身份证的函数,函数名称为:FUN_IS_IDENNO
下面是一个用于判断是否是身份证号码的Oracle 11g函数(FUN_IS_IDENNO)。身份证号码通常为18位(或者旧的15位),前17位为数字,第18位为数字或字母X,并且需要符合一定的规则,例如出生日…...
如何使用Spring Cloud Gateway搭建网关系统
使用Spring Cloud Gateway搭建网关系统是一个涉及多个步骤的过程,主要包括创建Spring Boot项目、添加 Spring Cloud Gateway依赖、配置路由规则以及运行和测试网关。以下是详细的步骤:一、创建Spring Boot项目 选择工具: 可以使用Spring Ini…...

油烟机制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
油烟机制造5G智能工厂物联数字孪生平台,是智能制造与信息技术的深度融合产物。数字孪生工业互联平台通过部署在工厂各个环节的传感器和设备,实时采集、分析和处理生产过程中的海量数据,构建出高度逼真的数字孪生模型。这一模型不仅能够真实反…...