spark运行流程
1.Driver创建一个sparkContext
2.sparkContext向资源管理器注册并申请启动executor,资源管理器启动executor
3.executor向sparkContext申请task
4.sparkContext将应用程序分发给executor
5.sparkContext建成DAG图,DAGScheduler将DAG图解析成stage,每个stage有多个task,形成taskSet发送给taskScheduler,由taskScheduler将task发送给executor运行
6.tast在executor上运行,运行完释放所有资源
spark有哪些组件?
1.master:管理集群和节点,不参与计算
2.worker:计算节点,管理executor,和master汇报
3.Driver:运行程序的main方法,创建sparkContext对象
4.sparkContext:控制整个application的生命周期,包括dagScheduler和taskScheduler等组件
5.client:用户提交程序的入口
SparkRDD机制理解吗?
rdd是分布式弹性数据集,所有的算子都是基于rdd来执行的,rdd执行过程中会形成dag图,然后形成后lineage,如果某个节点上的rdd分区因为节点故障,导致数据丢失,那么rdd可以根据自己的数据来源重新计算该分区,保证容错性,rdd存储是block和node之间的映射,逻辑上是一个hdfs文件,他是被分区的,每个分区分布在集群中不同节点上,从而让rdd的数据可以并行计算.rdd的数据默认存放在内存中,但是内存资源不足时,spark会自动将rdd数据写入磁盘。
rdd中reduceByKey和groupByKey哪个性能好,为什么?
reduceByKey 和 groupByKey都存在shuffle操作,但是reduceByKey可以在shuffle之前对分区内相同key的数据集进行预聚合(combine)功能,这样会较少落盘的数据量,而groupByKey只是进行分组,不存在数据量减少的问题,reduceByKey性能比较高。
reduceByKey其实包含分组和聚合的功能;groupByKey只能分组,不能聚合,所以在分组聚合的场合下,推荐使用reduceByKey,如果仅仅是分组而不需要聚合,那么还是只能使用groupByKey。
cogroup rdd实现原理,在什么场景下使用过这个rdd?
cogroup:对多个rdd中的kv元素,每个rdd中相同的key中的元素分别聚合成一个集合。
与reduceByKey不同的是:reduceByKey针对一个rdd中相同的元素进行合并,而cogroup针对多个rdd中相同的key的元素进行合并。
cogroup的函数实现:这个实现根据要进行合并的两个rdd操作,生成一个CoGroupedRDD的实例,这个rdd的返回结果是把相同的key中两个rdd分别进行合并操作,最后返回的rdd的value是一个pair的实例,这个实例包括两个iterable的值,第一个值表示的是rdd1中相同key的值,第二个值表示的是rdd2中相同key的值。
场景:表关联查询或者处理重复的key.
如何区分rdd的宽窄依赖?
窄依赖:父rdd的一个分区只能被子rdd的一个分区依赖。
宽依赖:父rdd的一个分区可以被子rdd的多个分区所依赖,涉及到shuffle。
为什么设计宽窄依赖?
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/4831.html