图解Spark第一季【全是大厂面试题!】

Spark作为大数据计算平台后起之秀,在2014年打破了Hadoop保持的基准排序记录,使用206个节点在23分钟里完成了100TB数据的排序,而Hadoop则是使用2000个节点在72分钟的时间里完成同样数据的排序。也就是说,Spark仅用了十分之一的计算资源,获得了比Hadoop快3倍的速度。

为什么速度如此之快?让我们首先探讨一下Spark的底层架构设计,揭示其中的精妙之处。

一、Spark架构设计

面试官:你知道Spark架构吗?

标准答案:我知道的,Spark架构包括控制节点Driver,以及工作节点Executor和集群资源管理器。其中,Diver是整个架构的老大,主要负责资源申请以及任务分配等工作;Executor是一个JVM进程,专门用于计算;集群资源管理器可以是 Spark 自带的资源管理器, 也可以是 YARN 或 Mesos 等资源管理框架。总结一下,Spark 采用主从架构, 包含一个 Master(即Driver)和若干个 Worker。

如果面试官继续追问:这种架构相比Hadoop有什么优势?

标准答案:与Hadoop MapReduce 计算框架相比,Spark 所采用的 Executor 有两个优点:一是利用多线程来执行具体的任务,减少任务的启动开销,而MapReduce采用的是多进程模型;二是 Executor 中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备(默认使用内存,当内存不够时,会写到磁盘),当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读该存储模块里的数据,而不需要读写到 HDFS 等文件系统里,因而有效地减少了 I/O 开销,

如果面试官继续追问:Application、Job、Stage、Task之间的联系是什么?

标准答案:总体而言,在 Spark 中,一个应用(Application)包含若干个作业(Job),一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成。

如果面试官继续追问:Spark如何运行这些作业?

二、Spark运行基本流程

标准答案:

  1. 当一个 Spark 应用被提交时,首先需要为这个应用构建基本的运行环境,即由任务控制节点 (Driver)创建一个 SparkContext 对象,由 SparkContext 负责与资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等,SparkContext 会向资源管理器注册并申请运行 Executor的资源,SparkContext 可以看成是应用程序连接集群的通道。
  2. 资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着心跳发送到资源管理器上。
  3. SparkContext根据RDD的依赖关系构建DAG图,并将DAG图提交给 DAG 调度器(DAGScheduler)进行解析,将 DAG 图分解成多个阶段(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交到底层的任务调度器(TaskScheduler)进行处理;Executor 向 SparkContext 申请任务,任务调度器将任务分发给 Executor 运行,同时,SparkContext 将应用程序代码发放给 Executor。
  4. 任务在 Executor 上运行,把执行结果反馈给任务调度器,然后反馈给 DAG 调度器,运行完毕后写入数据并释放所有资源

#数据人的面试交流地##牛客在线求职答疑中心##大数据开发##面试经验#
全部评论

相关推荐

4 22 评论
分享
牛客网
牛客企业服务