Mapreduce和Spark的都是并⾏计算,那么他们有什么相同和区别
解析:
答:两者都是⽤mr模型来进⾏并⾏计算:
1)hadoop的⼀个作业称为job,job⾥⾯分为map task和reduce task,每个task都是在⾃⼰的进程中运⾏的,当task结束时,进程也会结束。
2)spark⽤⼾提交的任务成为application,⼀个application对应⼀个sparkcontext,app中存在多个job,每触发⼀次action操作就会产⽣⼀个job。这些job可以并⾏
或串⾏执⾏,每个job中有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job⽽来的,每个stage⾥⾯有多个task,组成taskset有
TaskSchaduler分发到各个executor中执⾏,executor的⽣命周期是和app⼀样的,即使没有job运⾏也是存在的,所以task可以快速启动读取内存进⾏计算。
3)hadoop的job只有map和reduce操作,表达能⼒⽐较⽋缺⽽且在mr过程中会重复的读写hdfs,造成⼤量的io操作,多个job需要⾃⼰管理关系。
spark的迭代计算都是在内存中进⾏的,API中提供了⼤量的RDD操作如join,groupby等,⽽且通过DAG图可以实现良好的容错。
解析:
答:rdd分布式弹性数据集,简单的理解成⼀种数据结构,是spark框架上的通⽤货币。
所有算⼦都是基于rdd来执⾏的,不同的场景会有不同的rdd实现类,但是都可以进⾏互相转换。
rdd执⾏过程中会形成dag图,然后形成lineage保证容错性等。 从物理的⻆度来看rdd存储的是block和node之间的映射。
解析:
答:主要有如下组件:
1)master:管理集群和节点,不参与计算。
2)worker:计算节点,进程本⾝不参与计算,和master汇报。
3)Driver:运⾏程序的main⽅法,创建spark context对象。
4)spark context:控制整个application的⽣命周期,包括dagsheduler和task scheduler等组件。
5)client:⽤⼾提交程序的⼊⼝。
解析:
答:⽤⼾在client端提交作业后,会由Driver运⾏main⽅法并创建spark context上下⽂。
www.aboutyun.com/thread-24246-1-1.html 5/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
执⾏add算⼦,形成dag图输⼊dagscheduler,按照add之间的依赖关系划分stage输⼊task scheduler。 task scheduler会将stage划分为task set分发到各个节点的
executor中执⾏。
解析:
答: spark调优⽐较复杂,但是⼤体可以分为三个⽅⾯来进⾏,1)平台层⾯的调优:防⽌不必要的jar包分发,提⾼数据的本地性,选择⾼效的存储格式如
parquet,2)应⽤程序层⾯的调优:过滤操作符的优化降低过多⼩任务,降低单条记录的资源开销,处理数据倾斜,复⽤RDD进⾏缓存,作业并⾏化执⾏等等,
3)JVM层⾯的调优:设置合适的资源量,设置合理的JVM,启⽤⾼效的序列化⽅法如kyro,增⼤off head内存等等