"Spark面试八股文"这个说法虽然带有一定的戏谑成分,但实质上是指面试中高频出现且几乎必问的基础知识点和概念性问题。下面是一些典型的Spark面试题及其简要回答要点,这些可以帮助你构建起对Spark全面而基础的理解框架:
1. Spark是什么?
- 答案要点:Apache Spark是一个开源的大数据处理框架,它提供了内存计算能力,可以显著加速大规模数据处理任务。相比Hadoop MapReduce,Spark支持更广泛的数据处理模型,包括批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(MLlib)和图形处理(GraphX)。
2. Spark的核心组件有哪些?
- 答案要点:核心组件包括:
- Spark Core:负责基本的数据处理功能,如任务调度、内存管理、故障恢复等。
- Spark SQL:用于处理结构化和半结构化数据,支持SQL查询和DataFrame/Dataset API。
- Spark Streaming:用于处理实时数据流,支持微批处理模型。
- MLlib:提供机器学习算法库。
- GraphX:用于图和图形并行计算的库。
3. 什么是RDD?它的特点是什么?
- 答案要点:RDD(弹性分布式数据集)是Spark的基本数据抽象,具有以下特点:
- 分区:数据被分成多个分区,可以在集群的不同节点上并行处理。
- 不可变:一旦创建,RDD就不可更改,对RDD的操作会生成新的RDD。
- 懒执行:操作延迟执行,直到行动操作触发计算。
- 容错:通过记录数据的血统(Lineage),在失败时可以重新计算丢失的部分。
4. 什么是DataFrame和Dataset?它们与RDD的区别?
- 答案要点:
- DataFrame:类似于关系型数据库中的表,由列组成,每列有名称和类型。相比RDD,DataFrame提供了优化的查询执行计划和Catalyst优化器。
- Dataset:结合了DataFrame的优化特性和强类型编程的能力,允许在编译时检查类型错误,提供了更高级别的抽象。
- 与RDD区别:DataFrame和Dataset在表达力和性能上优于RDD,因为它们利用了额外的结构信息和优化器。
5. Spark是如何进行任务调度的?
- 答案要点:Spark基于DAG(有向无环图)来安排任务执行,将复杂的计算任务分解成多个Stage,每个Stage包含多个Task。DAG Scheduler负责将Job分解成Stages,并为每个Stage生成Task Set;Task Scheduler则负责将Task分配给Worker节点上的Executor执行。
6. Spark中的宽依赖和窄依赖是什么?
- 答案要点:
- 窄依赖:父RDD的每个分区最多被一个子RDD的分区所依赖,易于在同一个节点上进行流水线处理。
- 宽依赖:一个父RDD的分区可能被多个子RDD的分区所依赖,通常需要进行shuffle操作,开销较大。
熟悉并能流畅地解释上述基础概念,是通过Spark相关面试的关键。此外,结合实际项目经验或动手实践中的具体例子来阐述,会使你的回答更加生动和有说服力。