Spark-Core源码阅读

本文详尽地剖析了Spark-Core的源码,包括Standalone、YARN、Mesos三种部署方式,Spark Context的初始化,RDD的工作原理,Job的提交与调度,BlockManager的分布式缓存,Shuffle操作的细节,RDD的Checkpoint机制以及Spark-Streaming的实现。适合初学者逐步了解Spark内核。
摘要由CSDN通过智能技术生成

吐血奉献,Spark-Core源码阅读,适合新手,详细请见链接:

http://download.csdn.net/detail/wl044090432/9421721

目录结构为:

一. Spark的部署方式Standalone、YARN、Mesos. 2

1.     Standalone.2

2.     Mesos.3

3.     YARN..3

二. Standalone部署下的Driver,Master和Work如何启动... 4

1.     Master的启动...4

2.     Work的启动...12

3.     Driver的启动...19

4.     流程图...24

三.  Spark Context的初始化...24

1.     Application的注册... 24

2.     Excutor的启动... 34

3.     流程图... 40

四.     详解Rdd. 40

1.     Rdd的基本组成... 40

2.     Rdd的Transformation和action. 43

3.     Rdd的依赖... 44

五.     Job的提交... 44

1.     Dependency、Stage和Task的划分... 44

2.     job的具体执行过程... 45

3.     job的运行过程的日志打印... 62

3.1 DAG图    62

3.2 Driver端日志:...62

六.     Application中Job的调度... 64

1.     Job调度的类结构... 65

2.     FAIR调度的资源池组成... 66

3.     FAIR调度原理解析... 69

3.1 TaskSetManager的提交...69

3.2 TaskSetManager的调度...71

七.     BlockManager(分布式缓存的实现)... 83

1.RDD的存储等级...83

2.Driver和Excutor的交互...85

2.1 Driver接受Excutor指令的过程:...85

2.2 Excutor接受Driver指令的过程:...86

2.3 Excutor和Excutor之间相互接受指令的过程:...87

3.Block的生成过程(Rdd如何遍历其分区数据)...87

4. 广播变量的原理...89

4.1 广播变量如何存储...89

4.2 广播变量如何读取...90

八.     详解Shuffle. 92

1.当前后RDD的分区函数相等时...95

2.当前后RDD的分区函数不相等时...98

2.1 HashShuffleManager.101

2.1.1ShuffleWrite.101

2.1.2ShuffleRead.103

2.1.3 流程图...104

2.1.3.1consolidateShuffleFiles=true.104

2.1.3.2consolidateShuffleFiles=false.106

2.2 SortShuffleManager.106

2.2.1ShuffleWrite.106

2.2.2ShuffleRead.111

2.2.2 流程图...111

九.     详解RDD的CheckPoint机制... 112

1RDDCheckPoint数据的写入...113

2RDDCheckPoint数据的读取...115

十.     Spark-Streaming. 116

1KafkaSpark-Streaming结合的receiver方式,不开启WAL功能...117

1.1 Driver端启动流程...117

1.2 Receiver端启动流程...125

1.3 Driver端和Receiver端的交互...134

2. KafkaSpark-Streaming结合的receiver方式,开启WAL功能...135

2.1 Receiver端流程...137

2.2 Driver端流程...149

2.3 Receiver和Dirver端的交互...153

2.4 Spark-Streaming恢复流程...154

3. KafkaSpark-Streaming结合的direct方式...159

3.1 Receiver不存在...161

3.2 Job如何提交...161


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你提交Spark Core源码学习笔记的时候,并注册Driver的流程,以Java的WordCount为例。 首先,编写提交Job的代码: ```java import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; public class WordCount { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("WordCount"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> lines = sc.textFile(args[0]); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaPairRDD<String, Integer> pairs = words.mapToPair(word -> new Tuple2<>(word, 1)); JavaPairRDD<String, Integer> counts = pairs.reduceByKey((a, b) -> a + b); counts.saveAsTextFile(args[1]); } } ``` 之后就是提交任务和注册Driver: ```java import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.SparkContext; public class WordCount { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("WordCount"); JavaSparkContext sc = new JavaSparkContext(conf); SparkContext spark = SparkContext.getOrCreate(conf); spark.addSparkListener(new MySparkListener()); JavaRDD<String> lines = sc.textFile(args[0]); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaPairRDD<String, Integer> pairs = words.mapToPair(word -> new Tuple2<>(word, 1)); JavaPairRDD<String, Integer> counts = pairs.reduceByKey((a, b) -> a + b); counts.saveAsTextFile(args[1]); } } class MySparkListener extends SparkListener { public void onApplicationStart(SparkListenerApplicationStart applicationStart) { String appName = applicationStart.appName(); System.out.println("Application started: " + appName); } public void onApplicationEnd(SparkListenerApplicationEnd applicationEnd) { long time = applicationEnd.time(); System.out.println("Application ended: " + time); } } ``` 这个代码会在提交任务的时候,自动注册Driver,并且添加了自定义的Listener。注意,在提交任务前,需要先启动Spark集群,并将提交路径和结果路径传递给代码的args数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值