建设网站为什么要虚拟主机,网站一般用什么免费字体,python语言程序设计基础,科技公司网站推荐#xff08;一#xff09;宽依赖和窄依赖
窄依赖(Narrow Dependency)#xff1a;指父RDD的每个分区只被子RDD的一个分区所使用#xff0c;例如map、filter等 这些算子一个RDD#xff0c;对它的父RDD只有简单的一对一的关系#xff0c;也就是说#xff0c;RDD的每个part…一宽依赖和窄依赖
窄依赖(Narrow Dependency)指父RDD的每个分区只被子RDD的一个分区所使用例如map、filter等 这些算子一个RDD对它的父RDD只有简单的一对一的关系也就是说RDD的每个partition仅仅依赖于父RDD 中的一个partition父RDD和子RDD的partition之间的对应关系是一对一的。宽依赖(Shuffle Dependency)父RDD的每个分区都可能被子RDD的多个分区使用例如groupByKey、 reduceByKeysortBykey等算子这些算子其实都会产生shuffle操作。也就是说每一个父RDD的partition中的数据都可能会传输一部分到下一个RDD的每个partition中。此时就会出现父RDD和子RDD的partition之间具有错综复杂的关系那么这种情况就叫做两个RDD之间是宽依赖同时他们之间会发生shuffle操作。 最左侧是linesRDD这个表示我们通过textFile读取文件中的数据之后获取的RDD接着是我们使用flatMap算子对每一行数据按照空格切开然后可以获取到第二个RDD这个RDD中包含的是切开的每一个单词
在这里这两个RDD就属于一个窄赖因为父RDD的每个分区只被子RDD的一个分区所使用也就是说他们的分区是一对一的这样就不需要经过shuffle了。
接着是使用map算子将每一个单词转换成(单词,1)这种形式此时这两个RDD也是一个窄依赖的关系父RDD的分区和子RDD的分区也是一对一的。最后我们会调用reduceByKey算子此时会对相同key的数据进行分组分到一个分区里面并且进行聚合操作此时父RDD的每个分区都可能被子RDD的多个分区使用那这两个RDD就属于宽依赖了。
(二Stage
spark job是根据action算子触发的,遇到action算子就会起一个job
注意
stage的划分依据就是看是否产生了shuflle(即宽依赖),遇到一个shuffle操作就划分为前后两个stage。stage是由一组并行的task组成stage会将一批task用TaskSet来封装提交给TaskScheduler进行分配最后发送到Executor执行。 注意Stage的划分规则从后往前遇到宽依赖就划分Stage
三Spark Job的三种提交方式
第一种standalone模式基于Spark自己的standalone集群。 指定–master spark://bigdata01:7077第二种是基于YARN的client模式。 指定–master yarn --deploy-mode client 这种方式主要用于测试查看日志方便一些部分日志会直接打印到控制台上面因为driver进程运行在本地客户端就是提交Spark任务的那个客户端机器driver负责调度job会与yarn集群产生大量的通信一般情况下Spark客户端机器和Hadoop集群的机器是无法内网通信只能通过外网这样在大量通信的情况下会影响通信效率并且当我们执行一些action操作的时候数据也会返回给driver端driver端机器的配置一般都不高可能会导致内存溢出等问题。第三种是基于YARN的cluster模式。【推荐】 指定–master yarn --deploy-mode cluster 这种方式driver进程运行在集群中的某一台机器上这样集群内部节点之间通信是可以通过内网通信的并且集群内的机器的配置也会比普通的客户端机器配置高所以就不存在yarn-client模式的一些问题了只不过这个时候查看日志只能到集群上面看了这倒没什么影响。