随笔分类 - spark 源码
摘要:结论 EventLoop是一个调度,其内部使用LinkedBlockingDeque类型的eventQueue对象,存储待处理的任务。 死循环调度线程 eventThread 不停的查询 eventQueue 中的新数据。 通过post方法, 提交任务到队列中。 EventLoop -> onRec
阅读全文
摘要:结论 DAGScheduler 在主线程提交任务到EventLoop阻塞队列中 DAGScheduler 在主线程等待异步任务的执行完成 EventLoop 回调 DAGScheduler的onReceive方法,进行Stage拆分 为什么不直接在主线程完成 猜想是因为采用 "生产消费" 设计,调度
阅读全文
摘要:结论 action类型的算子,最终由 SparkContext.runJob 触发 DAGScheduler.runJob action算子最终触发sparkContext.runJob saveAsTextFile action算子触发 /* 底层调用 SparkHadoopWriter.writ
阅读全文
摘要:结论 两种方式都是包装模式,即传入对象自己,然后生成新的对象; 非shuffle类算子,每次调用创建 MapPartitionsRDD shuffle类算子,每次调用创建 ShuffledRDD 非shuffle类 val words = lines.flatMap(_.split("\\s+"))
阅读全文
摘要:理解 goalSize:每个分区的预估大小(字节) splitSize: 实际分区大小 预估分区大小不足128M, 按照预估大小; 如果超过128M 就是128M 源码 public InputSplit[] getSplits(JobConf job, int numSplits) throws
阅读全文
摘要:环境调试 引入依赖 上篇文章提到SpartSubmit最终调用YarnClusterApplication对象的start方法, YarnClusterApplication代码存在于依赖包 spark-yarn 中,本文代码需要引入如下pom. 调试代码和生产代码不需要此依赖包。 <depende
阅读全文
摘要:结论 spark-submit命令是SparkSubmit类提供的命令行功能,通过解析命令行参数判断运行模式,集群方案,额外参数等信息,此例中触发YarnClusterApplication的start方法。 Spark submit 提交集群 Spark提交集群命令 spark-submit --
阅读全文
摘要:结论 SparkContext启动,根据setMaster设置的Url匹配运行模式。 SparkContext // 根据设置的master字符串的内容进行匹配 master match { // local模式 case "local" => ... ... // local[n] 和 local
阅读全文
摘要:结论 SparkConf设置的key / value 保存在SparkConf名为settings的变量中,该变量类型为ConcurrentHashMap SparkConf的setXX方法, 封装了特定的属性名和值存储到map中 SparkConf的set方法,直接将属性名和值存储到map中。 属
阅读全文
摘要:版本 本分析基于Spark version 3.1.2 Spark相关 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.1.2</version>
阅读全文
摘要:结论 local模式下,没有显示指定分区数(minPartitions),默认最小分区数不会超过2。 如果对spark.default.parallelism属性赋值 && 值>=2,则分区数为2. 其他情形分区数为1. 集群模式下,没有显示指定分区数(minPartitions),分区数(minP
阅读全文