大数据-Spark-Spark开发高频面试题

2023-09-19 16:02:49

一、spark的内存分布

堆内内存:
	在这使用堆内内存的时候,如果我们设置了堆内内存2个g的话,读取的数据也是两个g,此时又来两个g的数据,这样就会产生OOM溢出,因为处理完两个g的数据,并不会马上进行GC。
堆外内存:
	这样我们就可以使用堆外内存,也就是物理内存,堆外内存可以精准的申请和释放空间,不需要Gc,性能比较高,提升了任务的效率。

二、Spark的宽窄依赖

宽依赖:
	一个父RDD分区中的数据划分到多个子RDD分区的过程,也就说明有shuffle的过程。如GroupByKey,reduceByKey,join,sortByKey等。
窄依赖:
	一个父RDD分区中的数据被一个子RDD分区所使用,map,filter。

三、Spark中reduceByKey和groupByKey的区别

reduceByKey:按照key进行聚合,在shuffle之前有个combine预聚合的操作,返回的结果是RDD(K,V)
groupByKEy:直接按照key进行进行分组,直接进行shuffle
建议使用reduceByKey 但注意是否会影响最终的业务逻辑

四、Spark的缓存

将频繁使用的RDD进行缓存到内存中,后面RDD用到的时候去内存中区就不需要重复了,提高任务的执行效率
cache时间数据保存在内存中
程序结束后会被清除或手动调用unpersist方法清除
会记录RDD的血缘关系

五、什么是RDD

一个弹性分布式的数据集
数据可以保存在内存中也可以保存在磁盘中
他是一个分布式的计算的集合
RDD有3个特征分区、不可变、并行操作
RDD是有好多分区组成的,操作RDD的时候,对RDD里的每个分区进行操作
RDD使用算子进行操作
算子分为转换算子与行动算子

六、Spark落盘场景

在shuffle中会进行落盘的操作
shuffle分为shuffle write和shuffle read
在这期间会进行一次落盘操作

七、Spark的shffle

Spark使用涉及到一些shuffle算子的时候就会进行shuffle
shuffle的过程:

八、Spark内存OOM的情况

1. map过程中产生大量对象导致内存溢出
2. 数据不平衡导致内存溢出
3. coalesce调用导致内存溢出
4. shuffle后内存溢出
5. standalone模式下资源分配不均匀导致内存溢出
6. 在RDD中,公用对象能减少OOM的情况

九、怎样避免SparkOOM

1. 使用mapPartition代替部分map操作,或者连续使用map的操作
2. broadcast join和普通join
3. 先filter在join
4. partitionBy优化
5. combineDyKey的使用
6. 参数优化

十、Spark shuffle的默认并行度

由spark.sql.shuffle.partitions决定默认并行度为200,数据量比较的是并且集群性能可以的时候也已适当的加大

十一、Coalesce和Repartition的区别

Coalesce和Repartition两个都是用来改变分区的,Coalesce用来缩减分区但不会进行shuffle,Repartition用来增加分区会进行shuffle的操作,在spark中减少文件个数会使用coalesce来减少分区,但如果分区量过大,分区数过少就会出现OOM,所以coalesce缩小分区个数也需合理。

十二、如何使用spark实现TopN的操作

方法一:
	(1)按照key对数据进行聚合(reduceByKey)
	(2)将value转换为数组,利用scala中sortBy或者sortWith进行排序(mapValues)数据量太大,会OOM。
方法二:
	(1)自定义分区器,按照key进行分区,使不同的key进到不同的分区中
	(2)对每个分区运用spark的排序算子进行排序

十三、spark中的共享变量

累加器是spark中提供的一种分布式变量机制,其原理类似与mapreduce先分后合,累加器的一个常用用途在对作业执行中的事件进行计数。而广播变量用来搞笑分发较大的对象。

十四、Coalesce和Repartition的关系与区别

关系:都是用来修改RDD的partition数量的,repartiotion底层调用的就是coalesce()方法coalesce(numPaitition,shuffle=true)
区别:repartiotion一定会发生shuffle,coalesce根据传入的参数来判断是否会发生shuffle
	 一般情况下增大rdd的partition的数量使用repartition,减少partition数量使用coalesce

十五、Spark的调优

遵循几个原则
原则一:避免重复使用的RDD
原则二:尽可能复用一个RDD
原则三:对多次使用的RDD进行持久化
原则四:尽量避免使用shuffle类的算子
原则五:使用map-side预聚合的shuffle操作
原则六:使用高性能的算子
原则七:广播大变量
原则八:使用Kryo优化序列化性能
原则九;优化数据结构

十六、Spark中RDD与DataFream及DataSet之间的关系

宏观:
	RDD:弹性分布式数据集
	Datafream在RDD上多了一层schema
	Dataset在datafream之上多了一个数据结构
微观:
	RDD:
		优点 编译时:
				编译时可以检查类型是否安全
		    面向对象的风格:
				可以通过直接点方法对数据进行操作
		缺点 序列化与反序列化消耗资源太大,反序列化时会将数据结构与数据内容都序列化
			GC操作频繁,RDD要频繁的创建和销毁,务必会产生很多的GC操作
	Datafream:在RDD之上引入一层schemaoff-head
		       多个RDD每行的数据结构都一致,spark就可以通过schema来识别数据结构在反序列化的时候可以只反序列化数据而结构就可以省略掉了
	Dataset:综合了RDD与Datafream的优点,并引入encoding数据再进行序列化时ancoding出来的字节码和off-head互通,这样就可以按需读取数据			
三者之间的转换:
	rdd - df = toDF
	rdd - ds = toDS
	df - ds = as[]
	ds - df = toDF
	ds - rdd = RDD
	df - rdd = RDD

十七、简述介绍sparkStreaming窗口函数的原理

窗口函数就是在原来定义的sparkStreaming计算批次大小的基础上在进行封转,每次计算多个批次的数据,同时还需要传递一个滑动步长的参数,用来设置当前任务完成之后下次从什么地方开始计算。

十八、SparkStreaming精准一次消费

1. 手动维护偏移量
2. 处理完业务数据后,在进行提交偏移量的操作
极端条件下,如果在提交偏移量断网或停电会造成spark程序第二次启动时重复消费问题,所以在涉及到金额或精确度非常高的场景会使用事务保持精准一次消费。
更多推荐

建造者模式

1、概述在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计

微服务是个坏主意吗?

曾几何时,我记得我的手指疯狂地敲打键盘,与庞大而杂乱的代码库搏斗。那是巨石的时代,代码就像古老的城堡一样,由一块块石头砌成一个令人印象深刻的庞然大物。几年过去了,时代变了。开发人员口中的流行语变成了“微服务”。微服务革命——承诺成为我们的救世主。我们被告知,通过将庞然大物分割成更小、自包含的独立服务,我们将获得无与伦比

Dynatrace获评《2023 Gartner® 应用性能监控(APM)和可观测性魔力象限™》“领导者”,前瞻性与执行力均表现卓越

中国上海,2023年9月12日——统一的可观测性和安全解决方案公司Dynatrace(纽交所代码:DT)日前宣布在《2023Gartner应用性能监控(ApplicationPerformanceMonitoring,APM)和可观测性魔力象限》报告中获评“领导者”。Gartner对19家厂商进行了评测,Dynatra

基于Hadoop的MapReduce网站日志大数据分析(含预处理MapReduce程序、hdfs、flume、sqoop、hive、mysql、hbase组件、echarts)

需要本项目的可以私信博主!!!本项目包含:PPT,可视化代码,项目源码,配套Hadoop环境(解压可视化),shell脚本,MapReduce代码,文档以及相关说明教程,大数据集!本文介绍了一种基于Hadoop的网站日志大数据分析方法。本项目首先将网站日志上传到HDFS分布式文件系统,然后使用MapReduce进行数据

Microsoft Excel 101 简介

什么是MicrosoftExcel?MicrosoftExcel是一个电子表格程序,用于记录和分析数值数据。将电子表格想像成构成表格的列和行的集合。字母通常分配给列,数字通常分配给行。列和行相交的点称为像元。单元格的地址由代表列的字母和代表行的数字给出。让我们使用下图说明这一点。为什么要学习MicrosoftExcel

IF,AND,OR 或嵌套 IF &在 Excel 中不是逻辑函数

事情并非总是我们希望的那样。意外的事情可能发生。例如,假设您必须将数字相除。尝试将任何数字除以零(0)都会产生错误。在这种情况下,逻辑功能很方便。在本教程中,我们将涵盖以下主题。在本教程中,我们将涵盖以下主题。什么是逻辑功能此功能使我们能够在执行公式和函数时引入决策制定。功能习惯于;检查条件是对还是错结合多个条件Wha

【Linux】线程池 | 自旋锁 | 读写锁

文章目录一、线程池1.线程池模型和应用场景2.单例模式实现线程池(懒汉模式)二、其他常见的锁1.STL、智能指针和线程安全2.其他常见的锁三、读者写者问题1.读者写者模型2.读写锁一、线程池1.线程池模型和应用场景线程池是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等

深度学习之模型压缩、加速模型推理

简介当将一个机器学习模型部署到生产环境中时,通常需要满足一些在模型原型阶段没有考虑到的要求。例如,在生产中使用的模型将不得不处理来自不同用户的大量请求。因此,您将希望进行优化,以获得较低的延迟和/或吞吐量。延迟:是任务完成所需的时间,就像单击链接后加载网页所需的时间。它是开始某项任务和看到结果之间的等待时间。吞吐量:是

Linux内核源码分析 (B.9)深度解读 Linux 内核级通用内存池 —— kmalloc 体系

Linux内核源码分析(B.9)深度解读Linux内核级通用内存池——kmalloc体系文章目录Linux内核源码分析(B.9)深度解读Linux内核级通用内存池——kmalloc体系1\.kmalloc内存池中都有哪些尺寸的内存块2\.kmalloc内存池如何选取合适尺寸的内存块3\.kmalloc内存池的整体架构4

计网第五章(运输层)(六)(TCP可靠传输的实现)

目录一、基本概述二、具体实现1.前后沿:2.利用指针描述发送窗口的状态3.有差错情况之前在数据链路层时已经讨论过可靠传输(计网第三章(数据链路层)(二)(可靠传输)),也在其中提到过可靠传输并不局限于数据链路层。一、基本概述TCP通过以字节为单位的滑动窗口来实现可靠传输。可靠传输的概念在之前已经提到过,这里不再做赘述。

计算机视觉与深度学习-卷积神经网络-纹理表示&卷积神经网络-卷积神经网络-[北邮鲁鹏]

这里写目录标题参考文章全连接神经网络全连接神经网络的瓶颈全连接神经网络应用场景卷积神经网络卷积层(CONV)卷积核卷积操作卷积层设计卷积步长(stride)边界填充特征响应图组尺寸计算激活层池化层(POOL)池化操作定义池化操作作用池化层超参数常见池化操作全连接层(FC)样本增强翻转随机缩放&抠图色彩抖动参考文章计算机

热文推荐