解析:
答: 1)⼀个Spark作业运⾏时包括⼀个Driver进程,也是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的⼈⼝点;2)功能:负责向集群申请
资源,向master注册信息,负责了作业的调度,,负责作业的解析、⽣成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。
解析:
1)本地模式
Spark不⼀定⾮要跑在hadoop集群,可以在本地,起多个线程的⽅式来指定。将Spark应⽤以多线程的⽅式直接运⾏在本地,⼀般都是为了⽅便调试,本地模式分三
www.aboutyun.com/thread-24246-1-1.html 2/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
类
· 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模式。官⽅推荐这种模式(当然,原因之⼀是⾎缘关系)。正是由于Spark开发之初就考虑到⽀持Mesos,因此,⽬前⽽⾔,Spark运⾏在
Mesos上会⽐运⾏在YARN上更加灵活,更加⾃然。⽤⼾可选择两种调度模式之⼀运⾏⾃⼰的应⽤程序:
1) 粗粒度模式(Coarse-grained Mode):每个应⽤程序的运⾏环境由⼀个Dirver和若⼲个Executor组成,其中,每个Executor占⽤若⼲资源,内部可运⾏多个
Task(对应多少个“slot”)。应⽤程序的各个任务正式运⾏之前,需要将运⾏环境中的资源全部申请好,且运⾏过程中要⼀直占⽤这些资源,即使不⽤,最后程序
运⾏结束后,回收这些资源。
2) 细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成⼤量资源浪费,Spark On Mesos还提供了另外⼀种调度模式:细粒度模式,这种模式类似于现在
的云计算,思想是按需分配。
解析:
答:主要功能:管理当前节点内存,CPU的使⽤状况,接收master分配过来的资源指令,通过ExecutorRunner启动程序分配任务,worker就类似于包⼯头,管理
分配新进程,做计算的服务,相当于process服务。需要注意的是:1)worker会不会汇报当前信息给master,worker⼼跳给master主要只有workid,它不会发送
资源信息以⼼跳的⽅式给mater,master分配的时候就知道work,只有出现故障的时候才会发送资源。2)worker不会运⾏代码,具体运⾏的是Executor是可以运
⾏具体appliaction写的业务逻辑代码,操作代码的节点,它不会运⾏程序的代码的。
解析:
答:1)基于内存计算,减少低效的磁盘交互;2)⾼效的调度算法,基于DAG;3)容错机制Linage,精华部分就是DAG和Lingae
简单说⼀下hadoop和spark的shuffle相同和差异?
解析:
答:1)从 high-level 的⻆度来看,两者并没有⼤的差别。 都是将 mapper(Spark ⾥是 ShuffleMapTask)的输出进⾏ partition,不同的 partition 送到不同的
reducer(Spark ⾥ reducer 可能是下⼀个 stage ⾥的 ShuffleMapTask,也可能是 ResultTask)。Reducer 以内存作缓冲区,边 shuffle 边 aggregate 数据,等到
数据 aggregate 好以后进⾏ reduce() (Spark ⾥可能是后续的⼀系列操作)。
2)从 low-level 的⻆度来看,两者差别不⼩。 Hadoop MapReduce 是 sort-based,进⼊ combine() 和 reduce() 的 records 必须先 sort。这样的好处在于
combine/reduce() 可以处理⼤规模的数据,因为其输⼊数据可以通过外排得到(mapper 对每段数据先做排序,reducer 的 shuffle 对排好序的每段数据做归
并)。⽬前的 Spark 默认选择的是 hash-based,通常使⽤ HashMap 来对 shuffle 来的数据进⾏ aggregate,不会对数据进⾏提前排序。如果⽤⼾需要经过排序
的数据,那么需要⾃⼰调⽤类似 sortByKey() 的操作;如果你是Spark 1.1的⽤⼾,可以将spark.shuffle.manager设置为sort,则会对数据进⾏排序。在Spark 1.2
中,sort将作为默认的Shuffle实现。
3)从实现⻆度来看,两者也有不少差别。 Hadoop MapReduce 将处理流程划分出明显的⼏个阶段:map(), spill, merge, shuffle, sort, reduce() 等。每个阶段各
司其职,可以按照过程式的编程思想来逐⼀实现每个阶段的功能。在 Spark 中,没有这样功能明确的阶段,只有不同的 stage 和⼀系列的 transformation(),所以
spill, merge, aggregate 等操作需要蕴含在 transformation() 中。
www.aboutyun.com/thread-24246-1-1.html 4/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
如果我们将 map 端划分数据、持久化数据的过程称为 shuffle write,⽽将 reducer 读⼊数据、aggregate 数据的过程称为 shuffle read。那么在 Spark 中,问题就
变为怎么在 job 的逻辑或者物理执⾏图中加⼊ shuffle write 和 shuffle read 的处理逻辑?以及两个处理逻辑应该怎么⾼效实现?
Shuffle write由于不要求数据有序,shuffle write 的任务很简单:将数据 partition 好,并持久化。之所以要持久化,⼀⽅⾯是要减少内存存储空间压⼒,另⼀⽅⾯
也是为了 fault-tolerance。