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集群会启动DriverExecutor两种JVM进程,

  • Driver:负责创建 spark 上下文,提交 spark 作业 job,并将作业转换为计算任务 task,在各个 Executor 进程间协调任务的调度

  • Excutor:负责在工作节点执行具体的计算任务,并将结果返回给 Driver,同时为需要持久化的 RDD 提供存储功能

4、spark 堆内和堆外内存

spark 内存管理中,涉及到的堆内内存(On-heap Memory)和堆外内存(Off-heap Memory) 两种,因为 Driver 的内存管理相对简单,因此下面说的内存特指的 Excutor 端的内存

Excutor 作为一个 JVM 进程,其内存管理建立在 JVM 内存管理之上,SparkJVM 的堆内空间进行更为详细的分配,以便充分利用内存。同时也引入了堆外内存,使之可以直接在工作节点的系统内存中开辟空间,进一步优化了内存的使用。

堆内内存的大小,由Spark应用程序启动时的–executor-memoryspark.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-heapExecution Memory、Storage Memory、User Memory、Reserved Memory使用 JVM 管理
off-heapExecution 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):返回一个新的 rddrdd 中每个元素会经过 func 函数的逻辑进行过滤

    • reduceByKey(func, [numTask]):在一个(K,V)RDD上调用,返回一个(K,V)RDD,使用 reduce 函数将相同 key 的值聚合在一起,reduce 任务的个数可以通过第二个参数设置

  • actionfirst、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:国内大环境比较少用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!

文章目录 解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!背景:为何选择KeymouseGo?KeymouseGo简介安装KeymouseGo简单函数使用应用场景常见问题与解决方案总结 解锁自动化新境界:KeymouseGo,…

在WPF中自定义控件时如何选择基类

在WPF中需要自定义控件,首要要选择需要继承的基类 FrameworkElement 这是常用的最低级的基类。通常,只有当希望重写OnRender()方法并使用DrawingContext从头绘制内容时,才会继承该类。 Control 当从头开始创建控件时,这是最常用…

Vue2知识点

注意:笔记内容来自网络 1Vue指令 指令是指&#xff1a;带有v-前缀的特殊标签属性 1.1 v-html v-html&#xff08;类似 innerHTML&#xff09; 使用语法&#xff1a;<p v-html"intro">hello</p>&#xff0c;意思是将 intro 值渲染到 p 标签中 类似 i…

【 ACM独立出版,见刊后1个月检索!!!】第二届通信网络与机器学习国际学术会议(CNML 2024,10月25-27)

第二届通信网络与机器学习国际学术会议&#xff08;CNML 2024&#xff09; The 2nd International Conference on Communication Networks and Machine Learning 官方信息 会议官网&#xff1a;www.cn-ml.org The 2nd International Conference on Communication Networks an…

JavaEE: 深入探索TCP网络编程的奇妙世界(二)

文章目录 TCP核心机制TCP核心机制二: 超时重传为啥会丢包?TCP如何对抗丢包?超时重传的时间设定超时时间该如何确定? TCP核心机制 书接上文~ TCP核心机制二: 超时重传 在网络传输中,并不会一帆风顺,而是可能出现"丢包情况"~ 为啥会丢包? 产生丢包的原因有很多…

倒序循环(一)

题目描述 输入一个正整数n&#xff0c;输出从 n~ 1 递减的序列。 输入格式 一行一个整数 n 输出格式 n 行&#xff0c;每行一个符合题目要求的整数 样例数据 样例输入#1 5样例输出#1 5 4 3 2 1样例输入#2 6样例输出#2 6 5 4 3 2 1数据范围 对于100%的数据&#xff…

C语言浮点型数据在内存中的存储(23)

文章目录 前言一、浮点数在内存中的存储练习引入浮点数的存储浮点数存的过程 二、浮点数取的过程E不全为0或不全为1E全为0E全为1 三、再回顾练习总结 前言 哎&#xff0c;之前写了一篇&#xff0c;可是中途退出没保存&#xff0c;只能再写一遍了~   浮点数在内存中的存储跟整…

python线程(python threading模块、python多线程)(守护线程与非守护线程)

文章目录 Python多线程入门1. Python多线程概述2. threading模块基础- Thread 类: 这是一个代表线程的类。可以通过创建Thread类的实例来新建一个线程。- Lock 类: 在多线程环境中&#xff0c;为了防止数据错乱&#xff0c;通常需要用到锁机制。Lock类提供了基本的锁功能&#…

ArcGIS10.2/10.6安装包下载与安装(附详细安装步骤)

相信从事地理专业的小伙伴来说&#xff0c;应该对今天的标题不会陌生。Arcgis是一款很常用的地理信息系统软件&#xff0c;主要用于地理数据的采集、管理、分析和展示。目前比较常见的版本有ArcGIS 10.2和ArcGIS 10.6。 不可否认&#xff0c;Arcgis具有强大的地图制作、空间分…

第4步CentOS配置SSH服务用SSH终端XShell等连接方便文件上传或其它操作

宿主机的VM安装CENTOS文件无法快速上传&#xff0c;也不方便输入命令行&#xff0c;用SSH终端xshell连接虚拟机的SSH工具就方便多了&#xff0c;实现VM所在宿主机Win10上的xshell能连接vm的centos要实现以下几个环节 1、确保宿主机与虚拟机的连通性。 2、虚拟机安装SSH服务&…

针对Docker容器的可视化管理工具—DockerUI

目录 ⛳️推荐 前言 1. 安装部署DockerUI 2. 安装cpolar内网穿透 3. 配置DockerUI公网访问地址 4. 公网远程访问DockerUI 5. 固定DockerUI公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…

AJAX(一)HTTP协议(请求响应报文),AJAX发送请求,请求问题处理

文章目录 一、AJAX二、HTTP协议1. 请求报文2. 响应报文 三、AJAX案例准备1. 安装node2. Express搭建服务器3. 安装nodemon实现自动重启 四、AJAX发送请求1. GET请求2. POST请求(1) 配置请求体(2) 配置请求头 3. 响应JSON数据的两种方式(1) 手动&#xff0c;JSON.parse()(2) 设置…

毕业设计选题:基于ssm+vue+uniapp的校园商铺系统小程序

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

分发饼干00

题目链接 分发饼干 题目描述 注意点 1 < g[i], s[j] < 2^31 - 1目标是满足尽可能多的孩子&#xff0c;并输出这个最大数值 解答思路 可以先将饼干和孩子的胃口都按升序进行排序&#xff0c;随后根据双指针 贪心&#xff0c;将当前满足孩子胃口的最小饼干分配给该孩…

旋转矩阵乘法,自动驾驶中的点及坐标系变换推导

目录 1. 矩阵乘法的内项相消 2. 左右乘&#xff0c;内外旋与动静坐标系 3. 点变换 3.1 点旋转后的点坐标表示 3.2 坐标系旋转后的点坐标表示 4. 坐标变换的实质 1. 矩阵乘法的内项相消 关于旋转变换&#xff0c;离不开矩阵的乘法&#xff0c;而矩阵乘法的物理意义和本身数…

[Linux#55][网络协议] 序列化与反序列化 | TcpCalculate为例

目录 1. 理解协议 1.1 结构化数据的传输 序列化与反序列化 代码感知&#xff1a; Request 类 1. 构造函数 2. 序列化函数&#xff1a;Serialize() 3. 反序列化函数&#xff1a;DeSerialize() 补充 4. 成员变量 Response 类 1. 构造函数 2. 序列化函数&#xff1a;…

【软件基础知识】什么是 API,详细解读

想象一下,你正在使用智能手机上的天气应用。你打开应用,瞬间就能看到实时天气、未来预报,甚至是空气质量指数。但你有没有想过,这些数据是如何神奇地出现在你的屏幕上的?答案就在三个字母中:API。 API,全称Application Programming Interface(应用程序编程接口),是现代软件世…

MYSQL面试知识点手册

第一部分&#xff1a;MySQL 基础知识 1.1 MySQL 简介 MySQL 是世界上最流行的开源关系型数据库管理系统之一&#xff0c;它以性能卓越、稳定可靠和易用性而闻名。MySQL 主要应用在 Web 开发、大型互联网公司、企业级应用等场景&#xff0c;且广泛用于构建高并发、高可用的数据…

工程师 - PFM介绍

在电子电路设计中&#xff0c;PFM&#xff08;Pulse Frequency Modulation&#xff0c;脉冲频率调制&#xff09;是一种调制技术&#xff0c;其主要特点是在负载变化时调整脉冲的频率&#xff0c;而保持脉冲的宽度&#xff08;时间长度&#xff09;相对恒定。与PWM&#xff08;…

记忆化搜索专题——算法简介力扣实战应用

目录 1、记忆化搜索算法简介 1.1 什么是记忆化搜索 1.2 如何实现记忆化搜索 1.3 记忆化搜索与动态规划的区别 2、算法应用【leetcode】 2.1 题一&#xff1a;斐波那契数 2.1.1 递归暴搜解法代码 2.1.2 记忆化搜索解法代码 2.1.3 动态规划解法代码 2.2 题二&#xff1…