首页 > 其他分享 >Spark面试高频真题一--Spark基础

Spark面试高频真题一--Spark基础

时间:2024-09-03 09:54:32浏览次数:12  
标签:join 真题 -- 分区 RDD key Spark 数据

〇、前言

Spark是业界常用的大规模分布式数据处理引擎,也是数仓开发最常用的工具组件,通常一二三轮面试官都会或多或少的提问相关的基础问题。下面是总结的常见的面试问题和答案参考。

一、Spark基础

1.spark和hive的区别是?

HiveQL是基于MapReduce框架和HDFS进行数据处理。Spark是基于spark算子和RDD进行数据处理的数据框架。RDD自动的基于内存和磁盘混合处理,速度会更快。

spark会根据DAG进行调度优化,无shuffle或者结果输出的算子的RDD都划分为同一stage,从而提高效率(尽可能并行,减少了shuffle的次数)。

同一个stage可以线程级并行加速,比hive的进程并行启动关闭的开销少一些。

Spark有lineage容错机制,中间执行错误时可以从最近的RDD分区断点进行重跑,效率会更高。

真题回顾

抖音数据开发一面

2.rdd的弹性怎么理解?

“弹性”是指在任何时候都能进行重算。当集群中的一台机器挂掉而导致存储在其上的RDD丢失后,Spark还可以重新计算出这部分的分区的数据,但用户感觉不到这部分的内容丢失过,RDD数据集就像块带有弹性的海绵一样,不管怎样挤压(分区遭到破坏)都是完整的。

具体实现的话是通过checkpoint和persist的数据持久化缓存机制,可以在分区故障之后通过上游血缘重新计算,从而达到快速恢复、用户无感的效果。

真题回顾

58同城数据开发一面

3.mapreduce的原理,运行过程介绍一下?

mapreduce的处理过程由map和reduce两个阶段组成,map和reduce任务的逻辑由用户自定义,但需要符合框架规范。

map前会将文件进行分片,分成大小相同的文件块,输入不同的map task进行处理。

map task处理完成之后会给每一条数据一个key值,key值会决定每条数据具体去往哪一个reduce task。相同key值的数据会发送到同一个reduce task,通常key值是多对一的。 

另外map传输数据前,通常会在本地按key将数据进行排序,同一个节点的相同key的数据会合并在一起,降低传输开销。接着是reduce接收数据。这个过程就叫shuffle。

Reduce端接收到数据后,再进行reduce端的计算处理。最终多个key值的数据集合会变成同一个数据集合。

真题回顾

得物数据开发一面

3.1,哪些查询是只有map的?

select from where 

真题回顾

得物数据开发一面

4.什么是宽依赖、什么是窄依赖?

窄依赖:父 RDD 的一个分区最多只会被子RDD 的一个分区依赖;

宽依赖:父 RDD 的一个分区会被子RDD的多个分区依赖(涉及到 shuffle)。

真题回顾

TIKTOK数据开发一面

5.哪些操作是宽依赖的操作?

具有宽依赖的transformations 包括: sort, reduceByKey, groupByKey, join, 和调用rePartition函数的任何操作.

真题回顾

TIKTOK数据开发一面

6.join操作都是宽依赖的操作吗?

如果join操作的两个RDD的分区器的分区数相同,分区规则为 partitionId = Key.hashCode % numPartitions,此时,相同的key在同一个分区内,就是窄依赖。

如果join操作的两个RDD没有分区器或分区数量不同,那么这个join操作是宽依赖,会执行shuffle操作。

真题回顾

TIKTOK数据开发一面

7.join执行时有哪些类型?什么情况用hash、什么情况是sort join?

分为5类:broadcast join;shuffle hash join;sort merge join;Cartesian product join;Broadcast nested loop join.

broadcast join一般用在大表join小表的场景,会将小表广播到大表端,从maptask的节点进行关联。

shuffle hash join是用于数据量比较大的情况,仅支持等值 Join;spark.sql.join.preferSortMergeJoin 参数必须设置为 false。其实现思想是将两张表的数据key进行hash映射,相同的key会被分到相同的分区

这样就保证相同的key被分到相同的reduce task,最后在节点内进行join。

sort merge join 用于数据规模极大的情况,仅支持等值 Join,并且要求参与 Join的 Keys 可排序。实现思想是将两个表内的数据按join key排序,之后再对相应的分区内的记录进行连接。

Cartesian product join表示是笛卡尔积关联,实际是两张表数据的全射。

Broadcast nested loop join. 专门适用于非等值链接。例,tableA.id > tableB.id 。会从tableA中每取出一条数据,就遍历一遍tableB之后,直至tableA也遍历完成。

真题回顾

TIKTOK数据开发一面

8.sparkSQL怎么转化成spark任务?

具体流程如下描述:

一、SparkSQL通过parser(解析器), 把sqlText转化成UnResolved Logical Plan.(这是一棵parsed Logical Plan AST语法树).

二、SparkSQL通过Analyzer(分析器), 借助Catalog中的元数据(schema), 把UnResolved Logical Plan转化成Resolved Logical Plan.(这是一棵Analyzer Logical Plan AST语法树) .

三、SparkSQL通过Optimizer(优化器), 将执行计划转化为Optimized Logical Plan.

四、SparkSQL通过SparkPlan, 将执行计划转化为Phsical Plan.

真题回顾

TIKTOK数据开发一面

9.RBO和CBO的定义和区别?

Spark SQL 的优化器有两种优化方式:一种是基于规则的优化方式(Rule-Based Optimizer,简称为RBO);另一种是基于代价的优化方式(Cost-Based Optimizer,简称为CBO)。

RBO 是发展比较早且比较成熟的一项 SQL 优化技术,它按照制定好的一系列优化规则(谓词下推、常量替换、列裁剪、非空过滤等)对SQL语法表达式进行转换,最终生成一个最优的执行计划。

CBO 是对 RBO 的改进演化,它能根据优化规则的不同(优化 Join 类型、优化多表 Join 顺序等)生成多个执行计划,再根据统计信息 (Statistics) 和代价模型 (Cost Model) 计算得出代价最小的物理执行计划。

10.spark 中job、stage、task之间的关系?

spark中的数据都是抽象为RDD的,并且支持两种类型算子操作,transformation和action,当遇到action算子时,spark会提交一个job将之前的一系列算子真正执行。

每个spark Job在具体执行过程中因为shuffle的存在,需要将其划分为一个或多个可以并行计算的stage,划分的依据是RDD间的依赖关系,当遇到宽依赖时因需要进行shuffle操作,涉及到了不同分区之间进行数据合并,故以此为界划分不同的Stage。

Stage是由一组Task组成的并行计算,因此每个stage中可能存在多个Task,这些Task执行相同的程序逻辑,只是它们操作的数据不同。一般RDD的一个分区对应一个Task

真题回顾

字节生服数据开发一面

滴滴数据开发一面

11.小文件过多在spark web UI是什么样的一个表象?

小文件过多的表现之一是各task读取的数据量远小于一个HDFS block即128M或256M,它也会导致任务执行的效率较低,极端情况甚至会导致HDFS Namenode内存压力大(因为每个HDFS文件在NM内存中的元信息都是150字节左右,过多数量的小文件会给NM维护这么多文件信息带来压力),

另一方面的判断标准是“Stages”菜单中,某个stage的进度蓝条上task数太多达到好几万的级别,用Input或Shuffle Read量除以task数后,每个task处理的数据量远小于128或256M。

真题回顾

抖音数据开发一面

12.AQE是什么?它是什么实现原理? 

AQE(Adaptive Query Execution)是SparkSQL的一种动态优化机制,在运行时,每当ShuffleMap阶段执行完毕,AQE都会结合这个阶段的统计信息,基于既定的规则动态地调整、修正尚未执行的逻辑计划和物理计划,来完成对原始查询语句的运行时优化。

13.AQE有什么特性?

目前AQE主要有三大特性:

1、自动分区合并:在Shuffle过后,ReduceTask数据分布参差不齐,AQE将自动合并过小的数据分区。

2、Join策略调整:如果某张表在过滤之后,尺寸小于广播变量阈值,这张表参与的数据关联就会从 Shuffle Sort Merge Join 降级(Demote)为执行效率更高的 Broadcast Hash Join。

3、自动倾斜处理:结合配置项,AQE自动拆分Reduce阶段过大的数据分区,降低单个ReduceTask的工作负载。

标签:join,真题,--,分区,RDD,key,Spark,数据
From: https://blog.csdn.net/m0_73359763/article/details/141831181

相关文章

  • Postman完美平替!免费开源、轻量级、快速且美观的 API 调试工具Hoppscotch
    Hoppscotch:开源API的智能伙伴,让开发更简单、更高效。 - 精选真开源,释放新价值。概览Hoppscotch是一个开源的API开发工具,它为开发者提供了一个全面而直观的平台来构建、测试和监控API。作为一个开源项目,它具有高度的可定制性和灵活性,允许用户根据自己的需求进行调整。Hoppscotc......
  • 使用W外链创建微信短链接的方法
    一般来说,使用W外链创建微信外链可以按照以下步骤进行:一、注册与登录W外链平台打开W外链平台的官方网站。注册一个账号,通常需要提供手机号、用户名、密码等信息。注册成功后,使用用户名和密码登录到平台。二、生成短链接将你想要转换为微信外链的原始长链接准备好。这......
  • 对OpenHarmony中LiteOS的内核分析——超时原理和应用
    前言在软件世界里面,超时是一个非常重要的概念。比如●当前线程暂时休眠1秒钟,休眠结束后继续执行●每5秒钟采集一下CPU利用率●数据发送失败,2秒钟以后再试一试●等待某种数据,但最多等待50毫秒应用//将当前任务休眠若干tick数,tick为时间单位,常见值为10毫秒LITE_OS_SEC_TEXTUINT3......
  • Redis
    Redis目录Redis为什么使用redis?Redis的持久化方式?Redis内存淘汰策略?redis有哪几种数据类型redis分布式锁底层原理?为什么使用分布式锁?redis集群模式?redis哨兵(Sentinel)模式?rediscluster原理?redis脑裂问题?什么是缓存和数据库双写不一致?怎么解决?雪崩?​编辑穿......
  • 25岁,转行网络安全工程师来的赢吗?
    先说结论:一点不晚!首先说一下这个行业的现状,真正科班出身软件测试专业的很少,因为只有个别院校有这个专业,根据了解也是教的很浅,对接不了企业的需求。那么说根据目前的现状,可以将这个行业的从业者分为这么几类:第一种,应届毕业生,要么是本专业学的就是这个,要么是在毕业之前就有......
  • 微信记账小程序的设计与实现-计算机毕业设计源码+LW文档
    摘要随着移动支付的普及,人们的交易行为越来越频繁,传统的记账方式已经无法满足现代人对于便捷、高效的需求。微信记账小程序应运而生,它依托于微信这一广泛使用的社交平台,能够随时随地记录收支情况,让人们轻松掌握自己的财务状况。此外,微信记账小程序能够帮助用户更好地规划和管理财......
  • 面试速通-SQL编码题
    〇、前话SQL题是数据相关的面试无可避免的小BOSS,虽然不同公司面试出题会披上不同的马甲,侧重各异,但总结起来题型就是那4、5种。下面让我们花上几分钟一起来通关它吧!一、连续日期计算1,例题表字段:用户ID,账户余额,系统余额日期。求出余额大于1000的用户的最大连续天数。2,解题要......
  • 两句话讲清楚离线安装docker镜像
    两句话讲清楚离线安装docker镜像文章目录两句话讲清楚离线安装docker镜像写在前面解决方案写在前面背景:银河麒麟、离线环境,装吧,一装一个不吱声。准备:首先,你要有个docker,安装好了才能搞镜像是不是,参考我的上一篇:两句话讲清楚离线安装docker其次,你要能访问hu......
  • 大模型与编程
    大模型与编程在现代技术的发展中,大型语言模型(LargeLanguageModels,LLMs)和编程已经紧密结合,成为促进技术进步和实现业务目标的重要一环。无论是自动化代码生成、优化开发流程,还是提供智能化的技术支持,大模型在编程领域中的应用前景广阔。本文将深入探讨大模型与编程的结合,探讨它......
  • 为什么很多人会选择学网络安全?前景如何?
    “网络安全”是当下十分热门的热词,受到了国家的高度重视与关注,并有关政策。在此背景之下,为了寻求新的职业发展机会,越来越多的朋友将目光聚焦于网络安全行业,那么为什么学习网络安全?网络安全课程前景如何?相信很多人都有所疑惑,接下来小编带你详细了解一下。为什么学习网络安......