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.rhkb.cn/news/428634.html

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

相关文章

人力资源数据集分析(二)_随机森林与逻辑回归

数据入口:人力资源分析数据集 - Heywhale.com 数据说明 字段说明EmpID唯一的员工IDAge年龄AgeGroup年龄组Attrition是否离职BusinessTravel出差:很少、频繁、不出差DailyRate日薪Department任职部门:研发部门、销售部门、人力资源部门Dista…

Win10 安装VS Code

一、软件介绍 Visual Studio Code(简称VS Code)是一个由微软开发的免费、开源的代码编辑器。它支持Windows、Linux和macOS操作系统,并且提供了许多功能,使其成为许多开发者的首选开发工具。以下是VS Code的一些主要特点&#xff…

【Elasticsearch】-7.17.24版本接入

官网 https://www.elastic.co/cn/downloads/elasticsearch 本项目基于windows环境下,其他环境操作类似 1、初始化配置 打开config/elasticsearch.yaml 添加如下配置 cluster.name: dams_clusternetwork.host: 127.0.0.1 http.port: 9200# 不开启geo数据库 inge…

vite 使用飞行器仪表示例

这里写自定义目录标题 环境vue代码效果图 环境 jquery npm install -S jqueryjQuery-Flight-Indicators 将img、css、js拷贝到vite工程目录中 打开 jquery.flightindicators.js&#xff0c;在文件开头加上import jQuery from "jquery"; vue代码 <template>&…

我与Linux的爱恋:命令行参数|环境变量

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;Linux的学习 文章目录 一.命令行参数二.环境变量1.环境变量的基本概念2.查看环境变量的方法3.环境变量相关命令4.环境变量的组织方式以及获取环境变量的三种方法 环境变量具有全局属性 一…

【Linux庖丁解牛】—Linux基本指令(上)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a; Linux庖丁解牛 &#x1f516;克心守己&#xff0c;律己则安 目录 1、 pwd命令 2、ls 指令 3、cd 指令 4、Linux下的根目录 5、touch指令 6、 stat指令 7、mkdi…

通威股份半年报业绩巨降:销售费用大增,近一年股价跌四成

《港湾商业观察》施子夫 王璐 光伏领域龙头企业通威股份&#xff08;600438.SH&#xff09;交出的半年报延续了2023年营收和净利润双下滑趋势&#xff0c;幅度显得更大。 即便受行业波动影响&#xff0c;但如何重整及提升盈利能力&#xff0c;通威股份还需要给出解决方案。​…

详解c++:new和delete

文章目录 前言一、new和mallocnew的用法&#xff08;爽点&#xff09;自动构造 delete和freedelete的用法&#xff08;爽点&#xff09; 提醒 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 在C中&#xff0c;new 和 delete 是两个非常重要的操作符&am…

FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频

Android早期的MediaPlayer控件对于网络视频的兼容性很差&#xff0c;所以后来单独推出了Exoplayer库增强支持网络视频&#xff0c;在《Android Studio开发实战&#xff1a;从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详细…

【Python】从基础到进阶(八):文件操作与上下文管理

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、Python文件操作基础1. 打开文件2. 读取文件3. 写入文件4. 文件指针定位 三、上下文管理1. 使用with管理文件2. 自定义上下文管理器 四、文件操作的最佳实践五、案例&#xff1a;日志文件管理1. 需求分析2. 实现…

OpenCV结构分析与形状描述符(24)检测两个旋转矩形之间是否相交的一个函数rotatedRectangleIntersection()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 测两个旋转矩形之间是否存在交集。 如果存在交集&#xff0c;则还返回交集区域的顶点。 下面是一些交集配置的例子。斜线图案表示交集区域&#…

从边缘设备到云端平台,合宙DTURTU打造无缝物联网解决方案

如今&#xff0c;物联网&#xff08;IoT&#xff09;技术飞速发展&#xff0c;万物互联的时代已然到来&#xff0c;那么&#xff0c;高效、稳定地连接边缘设备与云端平台&#xff0c;实现数据的实时采集、传输与处理&#xff0c;就成为了推动物联网应用落地的关键。 DTU&#…

以root用户登陆ubuntu的桌面环境

去我的个人博客观看&#xff0c;观感更佳哦&#xff0c;&#x1f619;&#x1f619; 前言 在学习Linux的时候&#xff0c;经常都需要使用sudo权限来对配置文件进行修改&#xff0c;常用的方法就是用vim编辑器在命令行界面进行修改&#xff0c;比如sudo vim /etc/profile&#…

【深度学习】(1)--神经网络

文章目录 深度学习神经网络1. 感知器2. 多层感知器偏置 3. 神经网络的构造4. 模型训练损失函数 总结 深度学习 深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向。 从上方的内容包含结果&#xff0c;我们可以知道&#xff0c;在学习深度学…

【Linux】解锁系统编程奥秘,高效文件IO的实战技巧

文件 1. 知识铺垫2. C文件I/O2.1. C文件接口2.2 fopen()与重定向2.3. 当前路径2.4. stdin、stdout、stderr 3. 系统文件I/O3.1. 前言3.2. open3.2.1. flags</h3>3.2.2. mode</h3>3.2.3. 返回值fd 3.3. write</h2>3.4. read3.5. close</h2>3.6. lseek&l…

面试经典150题——删除有序数组中的重复项

目录 题目链接&#xff1a;26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 题目描述 判题标准: 示例 提示&#xff1a; 解法一&#xff1a;双指针 Java写法&#xff1a; 运行时间 C写法&#xff1a; 运行时间 论屎山代码是如何出现的 时间复杂…

感知笔记2:ROS 视觉 - 沿线行走

如何在 ROS 中使用 OpenCV如何跟踪线路如何根据颜色查找不同元素跟踪多条路径并做出决定为线路跟踪创建基本的 PID 在本章中&#xff0c;您将学习如何使用 ROS 中最基本、最强大的感知工具&#xff1a;OpenCV。 OpenCV 是最广泛、最完整的图像识别库。有了​​它&#xff0c;…

Docker实操:安装MySQL5.7详解(保姆级教程)

介绍 Docker 中文网址: https://www.dockerdocs.cn Docker Hub官方网址&#xff1a;https://hub.docker.com Docker Hub中MySQL介绍&#xff1a;https://hub.docker.com/_/mysql ​ 切换到“Tags”页面&#xff0c;复制指定的MySQL版本拉取命令&#xff0c;例如 &#xff1a…

uv-ui组件的使用——自定义输入框的样式

一、官网的使用 二、自定义修改样式 我是在小程序中使用此组件 想要自定义修改样式的话&#xff0c;需要placeholderClass加上 placeholderStyle配合使用 tip1&#xff1a;单独使用placeholderClass&#xff0c;他只会第一次渲染时生效&#xff0c;输入文字再清除后就不生效…

十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能

十六&#xff0c;Spring Boot 整合 Druid 以及使用 Druid 监控功能 文章目录 十六&#xff0c;Spring Boot 整合 Druid 以及使用 Druid 监控功能1. Druid 的基本介绍2. 准备工作&#xff1a;3. Druid 监控功能3.1 Druid 监控功能 —— Web 关联监控3.2 Druid 监控功能 —— SQL…