全网最细Spark 基础面试题
Posted 程序员清辞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全网最细Spark 基础面试题相关的知识,希望对你有一定的参考价值。
1. 简述一下你对Spark 的理解?
Spark 是Apache 的顶级项目,是一种基于内存的快速、跨平台、可扩展的大数据分析计算引擎,这一点类似于hadoop 中的MapReduce,但是也有很多不同。Spark 拥有自己独立的资源调度框架,也支持使用其它的资源调度框架。在API 上不仅支持Java 语言,还支持Scala、Python 和 R 语言。在计算方式上,支持离线数据批次处理、微批次处理和实时流式处理。除此之外,Spark 还在Spark-Core 的基础上扩展出了非常丰富的高级工具,包括用来便捷处理结构化数据的Spark-SQL、用来处理微批次实时计算的SparkStreaming、用来实时计算的StructuredStreaming、用来进行机器学习的MLib(Machine Learning)和用来进行图计算的GraphX。
2. Spark 支持几种部署方式?
从所需节点个数上判断主要分为两种:
本地模式:
又称为Local 模式,程序被提交到单节点上,主要是用来测试代码的可用性。
集群模式:
Standalone:独立部署模式,由多台节点组成,待提交的任务可以被提交到不同的worker节点上进行并行计算,任务统一由master 控制。这一点在Yarn 中的ResourceManager 和NodeManager 关系非常相似,是Spark 官方内置的资源调度器。
Hadoop Yarn:Yarn 模式,资源的调度不再受Spark 统一管理,完全交给Yarn 管理,但是内部的计算模型还是由Spark 进行。Spark 不需要构建集群,用现有的Yarn 就可以直接实现。有两种运行方式:yarn-client和yarn-cluster,主要区别点是Driver 程序的运行节点。在国内实际生产中用的最多的一种方式。
Apache Mesos:Mesos 与Yarn 类似,都是对应用程序提供资源调度分配的,不同的是Mesos 是站在系统级别的角度为部署在Mesos 中的框架进行资源的分配,有点容器的意思,而Yarn 服务的对象是用户提交的要执行的任务。
Kubernetes:Kubernetes 又称为k8s,是现在非常流行的容器化快速部署集群的方案。资源也统一交给Master 节点进行管理,并且可以很方便的管理控制所有Node,类似于Mesos 的工作流程,但是本质上又有很大的区别。
3. 简述Spark 任务在Yarn 上的提交流程。
Spark 任务在Yarn 上的提交流程主要分为两种:yarn-client和yarn-cluster
用户通过spark-submit.sh 脚本并指定--master yarn 参数向yarn提交任务,由--deploy-mode 参数决定任务是提交到client 还是cluster运行(主要区别就是driver 是在任务提交节点运行,还是在 NodeManager 节点上运行)。任务在命令行提交之后,主要分为两个阶段:前期的任务运行环境准备阶段和后期的任务执行阶段。在准备阶段首先会解析指定的所有参数并在NodeManager上启动ApplicationMaster进程。如果是cluster 模式,则在内部创建一个Driver线程并执行main 方法初始化SparkContext 环境。如果是client 模式,则在任务提交节点启动Driver 线程,并初始化SparkContext 环境。随后,ResourceManager 会向ApplicationMaster 返回可以分配资源的节点列表。ApplicationMaster根据本地化级别对资源进行筛选,在获取到对应的Nodemanager列表后启动Container,并发送启动Executorbackend线程的命令。最后Executorbackend 会向Driver 发送请求进行反向注册,得到应答之后Executorbackend 开始创建创建Executor对象,前期的准备工作到此就完成了。在后期的任务执行阶段,driver 首先会将会将一个应用程序划分为多个阶段,每个阶段又会被划分为多个Task,并通过序列化的方式发送给Executor执行。在每个Executor 中存在一个线程池,发送过来的Task 任务会根据现有线程的数量并行执行。最后每个Task 将运算的结果拉取到Driver 端进行聚合,向用户最终返回这个j计算结果。
4. Spark 中最基本的数据类型是什么?
RDD,又被称为弹性分布式数据集,是Spark 中最基本的数据处理模型。通常也可以理解为是一个弹性的、不可变的、可分区、可并行计算的集合。RDD只是一个计算逻辑,本身不保存数据,数据在进入RDD 中后,可以进入到不同的分区中。
5. RDD 的依赖关系是如何体现的?
RDD 的依赖关系主要体现在多个RDD 算子依次拼接形成一条完整的上下游链,通常我们将这个关系表示为Lineage。这个Lineage会在程序运行时被记录下来,一旦发现某个分区或者阶段的计算失败,会根据记录的元数据进行自动重试。
以上是关于全网最细Spark 基础面试题的主要内容,如果未能解决你的问题,请参考以下文章
高薪就业必备 整合全网Java面试题——基础篇 (持续更新)
2022年Unity 面试题 五萬字 二佰道 Unity面试题大全,面试题总结全网最全,收藏一篇足够面试