大数据面试系列之——Spark

本文详细探讨了Spark的各种面试问题,涵盖了Spark的部署模式、技术栈组件、工作机制、应用程序执行流程、核心组件的功能,以及Spark的优化、性能、容错等方面。文章深入剖析了Spark与MapReduce的异同,讲解了Shuffle过程及其优化,并介绍了Spark在处理大数据面试中的关键知识点,如数据倾斜、RDD机制、序列化和持久化策略等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。

1.Spark有几种部署模式,各个模式的特点

  • 1.本地模式
    • Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。方便调试,本地模式分三类
      • local:只启动一个executor
      • local[k]: 启动k个executor
      • local:启动跟cpu数目相同的 executor
  • 2.standalone模式
    • 分布式部署集群,自带完整的服务,资源管理和任务监控是Spark自己监控,这个模式也是其他模式的基础
  • 3.Spark on yarn模式
    • 分布式部署集群,资源和任务监控交给yarn管理
    • 粗粒度资源分配方式,包含cluster和client运行模式
      • cluster 适合生产,driver运行在集群子节点,具有容错功能
      • client 适合调试,dirver运行在客户端
  • 4.Spark On Mesos模式
    • 粗粒度(coarse-grained),优点:启动task的时候开销比较小,但是该模式运行的时候每个application会一直占有一定的资源,直到整个application结束后才会释放资源
    • 细粒度(fine-grained),细粒度模式在spark2.0后开始弃用,优点:支持资源抢占,缺点:spark中运行的每个task的运行都需要去申请资源,也就是说启动每个task都增加了额外的开销

2.Spark技术栈有那些组件,每个组件有什么功能,分别适用与什么场景

  • 1.Spark core
    • 是其他组件的基础,spark的内核
    • 主要包括:有向循环图、RDD、Lingage、Cache、broadcast等
  • 2.SparkStreaming
    • 是一个对实时数据流进行高通量、容错处理的流式处理系统
    • 将流式计算分解成一系列短小的批处理作业
  • 3.Spark sql
    • 能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行外部查询
  • 4.MLBase
    • 是Spark生态圈的一部分专注于机器学习,让机器学习的门槛更低
    • MLBase分为四部分:MLlib、MLI、ML Optimizer和MLRuntime。
  • 5.GraphX
    • 是Spark中用于图和图并行计算

3.Spark有哪些组件

  • 1.master:管理集群和节点,不参与计算。
  • 2.worker:计算节点,进程本身不参与计算,和master汇报。
  • 3.Driver:运行程序的main方法,创建spark context对象。
  • 4.spark context:控制整个application的生命周期,包括dagsheduler和task scheduler等组件。
  • 5.client:用户提交程序的入口。

4.spark工作机制

  • 1.用户在client端提交作业后,会由Driver运行main方法并创建spark context上下文。
  • 2.执行Rdd算子,形成dag图输入dagscheduler。
  • 3.按照Rdd之间的依赖关系划分stage输入task scheduler
  • 4.task scheduler会将stage划分为taskset分发到各个节点的executor中执行

5. Spark应用程序的执行过程

  • 1.构建Spark Application的运行环境(启动SparkContext)
  • 2.SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;
  • 3.资源管理器分配Executor资源,Executor运行情况将随着心跳发送到资源管理器上;
  • 4.SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler;
  • 5.Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行,SparkContext将应用程序代码发放给Executor;
  • 6.Task在Executor上运行,运行完毕释放所有资源。

6.driver的功能是什么

  • 一个spark作业运行时包括一个Driver进程,也是作业的主进程,具有main函数,并且有SparkContext实例,是程序的入口
  • 功能
    • 向集群申请资源
    • 负责作业的调度和解析
    • 生成Stage并调度Task到Executor上(包括DAGScheduler,TaskScheduler)

7.Spark中Work的主要工作是什么?

  • 1.管理当前节点内存,CPU的使用状况,接收master分配过来的资源指令,通过ExecutorRunner启动程序分配任务
  • 2.worker就类似于包工头,管理分配新进程,做计算的服务,相当于process服务
  • 3.worker不会运行代码,具体运行的是Executor是可以运行具体appliaction写的业务逻辑代码

8.task有几种类型?

  • resultTask类型,最后一个task
  • shuffleMapTask类型,除过最后一个task其他都是

9.什么是shuffle,以及为什么需要shuffle?

  • shuffle中文翻译为洗牌,需要shuffle的原因是:某种具有共同特征的数据汇聚到一个计算节点上进行计算

10.Spark master HA 主从切换过程不会影响集群已有的作业运行,为什么?

  • 因为程序在运行之前,已经申请过资源了,driver和Executors通讯,不需要和master进行通讯的。

11.Spark并行度怎么设置比较合适

  • spark并行度,每个core承载2~4个partition(并行度)
  • 并行度和数据规模无关,只和内存和cpu有关

12.Spark程序执行,有时候默认为什么会产生很多task,怎么修改默认task执行个数?

  • 有很多小文件的时候,有多少个输入block就会有多少个task启动
  • spark中有partition的概念,每个partition都会对应一个task,task越多,在处理大规模数据的时候,就会越有效率

13.Spark中数据的位置是被谁管理的?

  • 每个数据分片都对应具体物理位置,数据的位置是被blockManager管理

14.为什么要进行序列化

  • 减少存储空间,高效存储和传输数据
  • 缺点:使用时需要反序列化,非常消耗CPU

15.Spark如何处理不能被序列化的对象?

  • 封装成object

16.Spark提交你的jar包时所用的命令是什么?

  • spark-submit

17.Mapreduce和Spark的相同和区别?(重点面试题)

  • 两者都是用mr模型来进行并行计算

  • hadoop的一个作业:job

    • job分为map task和reduce task,每个task都是在自己的进程中运行的
    • 当task结束时,进程也会结束
  • spark用户提交的任务:application

    • 一个application对应一个sparkcontext,app中存在多个job
    • 每触发一次action操作就会产生一个job
    • 这些job可以并行或串行执行
    • 每个job中有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job而来的
    • 每个stage里面有多个task,组成taskset有TaskSchaduler分发到各个executor中执行
    • executor的生命周期是和app一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算。
  • hadoop的job只有map和reduce操作,表达能力比较欠缺

    • 在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系。
  • spark的迭代计算都是在内存中进行的

    • API中提供了大量的RDD操作如join,groupby等
    • 通过DAG图可以实现良好的容错

18.简单说一下hadoop和spark的shuffle相同和差异?

  • high-level角度:

    • 两者并没有大的差别 都是将 mapper(Spark: ShuffleMapTask)的输出进行 partition,不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是下一个 stage 里的 ShuffleMapTask,也可能是 ResultTask)
      Reducer 以内存作缓冲区,边 shuffle 边 aggregate 数据,等到数据 aggregate 好以后进行 reduce()。
  • low-level 角度:

    • Hadoop MapReduce 是 sort-based,进入 combine() 和 reduce() 的 records 必须先 sort。
    • 好处:combine/reduce() 可以处理大规模的数据
      • 因为其输入数据可以通过外排得到
      • mapper 对每段数据先做排序
      • reducer 的 shuffle 对排好序的每段数据做归并
    • Spark 默认选择的是 hash-based,通常使用 HashMap 来对 shuffle 来的数据进行 aggregate,不提前排序
    • 如果用户需要经过排序的数据:sortByKey()
  • 实现角度:

    • Hadoop MapReduce 将处理流程划分出明显的几个阶段:map(), spilt, merge, shuffle, sort, reduce()
    • Spark 没有这样功能明确的阶段,只有不同的 stage 和一系列的 transformation(),spill, merge, aggregate 等操作需要蕴含在 transformation() 中

19. 简单说一下hadoop和spark的shuffle过程

  • hadoop:map端保存分片数据,通过网络收集到reduce端
  • spark:spark的shuffle是在DAGSchedular划分Stage的时候产生的,TaskSchedule要分发Stage到各个worker的executor,减少shuffle可以提高性能

20.partition和block的关联

  • hdfs中的block是分布式存储的最小单元,等分,可设置冗余,这样设计有一部分磁盘空间的浪费,但是整齐的block大小,便于快速找到、读取对应的内容
  • Spark中的partition是RDD的最小单元,RDD是由分布在各个节点上的partition组成的。
  • partition是指的spark在计算过程中,生成的数据在计算空间内最小单元
    同一份数据(RDD)的partion大小不一,数量不定,是根据application里的算子和最初读入的数据分块数量决定
  • block位于存储空间;partion位于计算空间,block的大小是固定的、partion大小是不固定的,是从2个不同的角度去看数据。

21.Spark为什么比mapreduce快?(重点面试题)

  • 基于内存计算,减少低效的磁盘交互
  • 高效的调度算法,基于DAG
  • 容错机制Linage

22.Mapreduce操作的mapper和reducer阶段相当于spark中的哪几个算子?

  • 相当于spark中的map算子和reduceByKey算子,区别:MR会自动进行排序的,spark要看具体partitioner

23.RDD机制

  • 分布式弹性数据集,简单的理解成一种数据结构,是spark框架上的通用货币
  • 所有算子都是基于rdd来执行的
  • rdd执行过程中会形成dag图,然后形成lineage保证容错性等
  • 从物理的角度来看rdd存储的是block和node之间的映射

24.RDD的弹性表现在哪几点?

  • 自动的进行内存和磁盘的存储切换;
  • 基于Lingage的高效容错;
  • task如果失败会自动进行特定次数的重试;
  • stage如果失败会自动进行特定次数的重试,而且只会计算失败的分片;
  • checkpoint和persist,数据计算之后持久化缓存
  • 数据调度弹性,DAG TASK调度和资源无关
  • 数据分片的高度弹性,a.分片很多碎片可以合并成大的,b.par

25.RDD有那些缺陷?

  • 不支持细粒度的写和更新操作(如网络爬虫)
    • spark写数据是粗粒度的,所谓粗粒度,就是批量写入数据 (批量写)
    • 但是读数据是细粒度的也就是说可以一条条的读 (一条条读)
  • 不支持增量迭代计算,Flink支持

26.什么是RDD宽依赖和窄依赖?

  • RDD和它依赖的parent RDD(s)的关系有两种不同的类型
    • 窄依赖:每一个parent RDD的Partition最多被子RDD的一个Partition使用 (一父一子)
    • 宽依赖:多个子RDD的Partition会依赖同一个parent RDD的Partition ࿰
### 回答1: 好的,下面是对大数据面试题——spark面试题(一)的回答: 1. 什么是Spark?它与Hadoop有什么区别? Spark是一个快速、通用、可扩展的大数据处理引擎,它可以在内存中进行数据处理,因此比Hadoop更快。与Hadoop相比,Spark的优点在于它可以在内存中进行数据处理,因此速度更快,而且它支持更多的数据处理方式,例如流处理、图形处理等。 2. Spark的核心组件有哪些? Spark的核心组件包括Spark Core、Spark SQL、Spark Streaming、MLlib和GraphX。 3. 什么是RDD?它有哪些特点? RDD是Spark中的一个基本概念,它代表一个不可变的分布式数据集合。RDD具有以下特点: - 可以在内存中进行计算,因此速度快; - 支持多种操作,例如map、reduce、filter等; - 可以进行持久化,以便在后续计算中重复使用。 4. Spark中的map和flatMap有什么区别? map和flatMap都是RDD中的转换操作,它们的区别在于: - map操作对每个元素进行转换,返回一个新的元素; - flatMap操作对每个元素进行转换,返回一个包含多个元素的序列。 5. 什么是Spark的shuffle操作? Spark的shuffle操作是指将数据重新分区的操作,它通常发生在reduce操作之前。Shuffle操作会将数据从多个节点上收集到一个节点上,然后重新分区,以便进行后续的计算。 6. Spark中的cache和persist有什么区别? cache和persist都是将RDD持久化到内存中,以便在后续计算中重复使用。它们的区别在于: - cache操作默认将数据持久化到内存中,而persist操作可以指定将数据持久化到内存、磁盘或者其他存储介质中; - cache操作是persist操作的一种简化形式,它默认将数据持久化到内存中,并且只能持久化到内存中。 7. Spark中的reduceByKey和groupByKey有什么区别? reduceByKey和groupByKey都是对键值对RDD进行操作的函数,它们的区别在于: - reduceByKey操作会在每个分区内先进行本地聚合,然后再进行全聚合,因此效率更高; - groupByKey操作会将所有的键值对都进行网络传输,然后在一个节点上进行聚合,因此效率较低。 8. Spark中的broadcast变量有什么作用? broadcast变量是一种只读的变量,它可以在所有节点上共享,以便在计算过程中使用。使用broadcast变量可以避免在网络上传输大量的数据,从而提高计算效率。 9. 什么是Spark的checkpoint操作? Spark的checkpoint操作是将RDD持久化到磁盘上,以便在后续计算中重复使用。与cache和persist不同的是,checkpoint操作会将数据持久化到磁盘上,以便在内存不足时可以从磁盘上恢复数据。 10. Spark中的Task是什么? Task是Spark中的一个基本概念,它代表一个可以在一个节点上执行的计算任务。Spark将一个RDD分成多个分区,每个分区对应一个Task,这些Task可以并行执行,以提高计算效率。 ### 回答2: 今天我们来讨论一下关于Spark大数据面试的一些常见问题。Spark是一种基于Hadoop的开源计算系统,它能够快速处理大规模数据,并且支持多种编程语言,包括Java、Scala和Python等。以下是一些Spark面试题及其答案: 1. Spark有哪几种部署模式? Spark有三种部署模式,分别是本地模式、集群模式和分布式模式。本地模式指的是在本地运行Spark应用程序,不需要连接到外部计算机。集群模式指的是单个Spark集群环境,它由一组Spark节点组成,可以在数据中心或云中运行。分布式模式指的是使用多个Spark集群并行处理大规模数据。 2. Spark和Hadoop的区别是什么? Spark和Hadoop都是处理大规模数据的工具,但它们有一些区别。首先,Spark处理数据速度快,因为它将数据存储在内存中,而Hadoop则将数据存储在磁盘中。其次,Spark支持更多的编程语言,包括Java、Scala和Python等,而Hadoop只支持Java。此外,Spark具有更好的机器学习和图形处理功能,可以更好地支持大规模数据分析。 3. Spark的RDD是什么? RDD是Spark中重要的概念,全称为Resilient Distributed Dataset。它是一个不可变的分布式数据集合,可以分区存储在不同节点上,并且每个分区都可以在并行处理中进行处理。RDD支持两种操作,即转化操作和行动操作。转化操作将一个RDD转换为另一个RDD,而行动操作返回一个结果或将结果输出至外部系统。 4. Spark的优化技术有哪些? Spark优化技术包括数据本地化、共享变量、宽依赖和窄依赖、缓存和持久化,以及数据分区等技术。数据本地化将数据存储在尽可能接近计算节点的位置,以减少网络传输的开销。共享变量将常用的变量通过广播或累加器的方式在节点中共享,从而减少网络传输量。宽依赖和窄依赖指的是在转化操作中RDD之间的依赖关系,窄依赖表示每个父分区最多与一个子分区有关联,而宽依赖则表示多个子分区可能与多个父分区关联。缓存和持久化技术可将RDD保存在内存中,从而加速访问速度。数据分区可以将数据划分为较小的块进行并行处理。 5. Spark Streaming是什么? Spark Streaming是Spark的一个扩展模块,它支持实时数据流处理。Spark Streaming可以将实时数据流以微批次方式处理,每个批次的数据处理平均耗时只有几秒钟。Spark Streaming可以将数据存储在内存或磁盘中,同时支持多种数据源和数据输出方式。 以上是关于Spark大数据面试题的一些回答,希望能够对大家有所帮助。如果你想深入学习Spark大数据处理技术,可以考虑参加相关的培训课程或在线课程。 ### 回答3: Spark是一个分布式计算框架,它可以使大规模数据处理更加高效和便捷。因此,在企业招聘大数据领域的人才时,对Spark的技术能力要求越来越高。以下是Spark面试题的回答: 1. Spark有哪些组件? Spark框架由三个核心组件组成:Spark Core、Spark SQL和Spark Streaming。此外,还有Spark MLlib、Spark GraphX、Spark R等个别不同的子组件。 2. 什么是RDD?与Dataframe有什么区别? RDD(弹性分布式数据集)是Spark的核心数据抽象,是不可变的分布式对象集合。RDD可以从文件中读取数据、从内存中读取数据、并行修改数据等。而Dataframe和RDD类似,但是Dataframe更加强大,因为它是带有结构化的RDD。Dataframe在处理大规模结构化数据时非常有效和便捷。 3. Spark如何处理缺失数据? Spark提供了两种处理缺失数据的方法:第一种是使用DataFrame API中的na函数,可以删除或替换缺失值;第二种是使用MLlib中的Imputer类,可以将缺失值替换为均值或中位数。 4. 什么是Spark的任务(task)? 一个任务是Spark作业中的最小执行单位。Spark集群上的作业被划分为多个任务,这些任务可以并行执行。 5. Spark的shuffle操作是什么?它为什么是昂贵的? Spark的shuffle操作是将一组数据重新分配到不同计算节点上的操作。Shuffle操作可能会导致大量数据的磁盘写入、网络传输和数据重组,这些都是非常昂贵的操作。因此,它在Spark集群中是一个相当昂贵的操作。 6. Spark中的Partition有什么作用? Partition是Spark中的数据划分单位。它可以将数据分成多个块并对每个块进行处理。Partition 可以提高 Spark 的并行度和运行效率,因为它可以将大规模数据分成多个小块,并在集群的多个计算节点上并行处理数据。 总而言之,Spark大数据领域中使用最广泛的计算引擎之一,其技术理念和应用场景非常广泛。对于求职者而言,掌握 Spark 的基本概念和技术特点,提高对 Spark 的理解和应用能力,将有助于更好地处理和分析大规模数据集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值