资料内容:
1. 分析⼀下⼀段spark代码中哪些部分在Driver端执⾏,哪些部分
在Worker端执⾏
Driver Program是⽤户编写的提交给Spark集群执⾏的application,它包含两部分
作为驱动: Driver与Master、Worker协作完成application进程的启动、DAG划分、计算任务封装、计算任
务分发到各个计算节点(Worker)、计算资源的分配等。
计算逻辑本身,当计算任务在Worker执⾏时,执⾏计算逻辑完成application的计算任务。
⼀般来说transformation算⼦均是在worker上执⾏的,其他类型的代码在driver端执⾏。
2. 讲⼀下spark的⼏种部署⽅式
⽬前,除了local模式为本地调试模式以为, Spark⽀持三种分布式部署⽅式,分别是standalone、spark on
mesos和 spark on YARN
Standalone模式
即独⽴模式,⾃带完整的服务,可单独部署到⼀个集群中,⽆需依赖任何其他资源管理系统。从⼀定程度上
说,该模式是其他两种的基础。⽬前Spark在standalone模式下是没有任何单点故障问题的,这是借助
zookeeper实现的,思想类似于Hbase master单点故障解决⽅案。将Spark standalone与MapReduce⽐
较,会发现它们两个在架构上是完全⼀致的:
都是由master/slaves服务组成的,且起初master均存在单点故障,后来均通过zookeeper解决
(Apache MRv1的JobTracker仍存在单点问题,但CDH版本得到了解决);
各个节点上的资源被抽象成粗粒度的slot,有多少slot就能同时运⾏多少task。不同的是,MapReduce
将slot分为map slot和reduce slot,它们分别只能供Map Task和Reduce Task使⽤,⽽不能共享,这是
MapReduce资源利率低效的原因之⼀,⽽Spark则更优化⼀些,它不区分slot类型,只有⼀种slot,可
以供各种类型的Task使⽤,这种⽅式可以提⾼资源利⽤率,但是不够灵活,不能为不同类型的Task定制
slot资源。总之,这两种⽅式各有优缺点。
Spark On YARN模式
spark on yarn 的⽀持两种模式:
yarn-cluster:适⽤于⽣产环境;
yarn-client:适⽤于交互、调试,希望⽴即看到app的输出
yarn-cluster和yarn-client的区别在于yarn appMaster,每个yarn app实例有⼀个appMaster进程,是为app
启动的第⼀个container;负责从ResourceManager请求资源,获取到资源后,告诉NodeManager为其启动
container。yarn-cluster和yarn-client模式内部实现还是有很⼤的区别。如果你需要⽤于⽣产环境,那么请
选择yarn-cluster;⽽如果你仅仅是Debug程序,可以选择yarn-client。
Spark On Mesos模式
Spark运⾏在Mesos上会⽐运⾏在YARN上更加灵活,更加⾃然。⽬前在Spark On Mesos环境中,⽤户可选择
两种调度模式之⼀运⾏⾃⼰的应⽤程序
粗粒度模式(Coarse-grained Mode):每个应⽤程序的运⾏环境由⼀个Dirver和若⼲个Executor组
成,其中,每个Executor占⽤若⼲资源,内部可运⾏多个Task(对应多少个“slot”)。应⽤程序的各个任务正式运⾏之前,需要将运⾏环境中的资源全部申请好,且运⾏过程中要⼀直占⽤这些资源,即使不
⽤,最后程序运⾏结束后,回收这些资源。
细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成⼤量资源浪费,Spark On Mesos还提供了
另外⼀种调度模式:细粒度模式,这种模式类似于现在的云计算,思想是按需分配。与粗粒度模式⼀
样,应⽤程序启动时,先会启动executor,但每个executor占⽤资源仅仅是⾃⼰运⾏所需的资源,不需
要考虑将来要运⾏的任务,之后,mesos会为每个executor动态分配资源,每分配⼀些,便可以运⾏⼀
个新任务,单个Task运⾏完之后可以⻢上释放对应的资源。