Spark大数据分析实战 第4章 Spark内核源码分析
所属分类 spark
浏览量 761
Spark集群启动过程
Spark应用程序提交过程
Spark作业工作原理
Spark检查点原理
Spark集群启动过程
在当前节点(脚本执行节点)上启动Master
在配置文件 conf/slave 中指定的每个节点上启动 Worker
sbin/start-all.sh
检查设值环境变量
加载Spark配置
${SPARK_HOME}/sbin/spark-config.sh
启动Master
${SPARK_HOME}/sbin/start-master.sh
启动Workers
${SPARK_HOME}/sbin/start-slaves.sh
Spark应用程序提交过程
应用程序提交入口 spark-submit
spark-shell spark-sql 进入交互式命令行
bin/spark-shell
${SPARK_HOME}/bin/spark-submit --class org.apache.spark.repl.Main
spark-shell 调用 spark-submit
并传入了org.apache.spark.repl.Main类 和 参数(例如--master)
通过org.apache.spark.repl.Main类启动的spark-shell
进入REPL模式(交互式编程环境)
bin/spark-sql
${SPARK_HOME}/bin/spark-submit --class org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver
无论采用哪种方式提交应用程序,都会间接调用 spark-submit 脚本
exec "${SPARK_HOME}"/bin/spark-class org.apache.spark.deploy.SparkSubmit "$@
最后使用exec命令执行了脚本bin/spark-class
并传入了org.apache.spark.deploy.SparkSubmit类和使用spark-submit命令时的所有参数
bin/spark-class用于执行Spark应用程序并启动JVM进程
org.apache.spark.deploy.SparkSubmit
--class org.apache.spark.repl.Main
--name "Spark shell"
Spark作业工作原理
与 MapReduce 比较
MapReduce工作原理
MapReduce计算模型主要由三个阶段组成
Map Shuffle Reduce
Map阶段
输入多个分片(Split) 每个分片由一个Map任务来处理
默认情况下,输入分片的大小与HDFS中数据块(Block)的大小是相同的
即文件有多少个数据块就有多少个输入分片,也就会有多少个Map任务
每个Map任务对输入分片中的记录按照一定的规则解析成多个 key value 对
默认将文件中的每一行文本内容解析成一个 key value 对
key为每一行的起始位置,value为行内容
在数据溢写到磁盘之前,会对数据进行分区(Partition)
分区的数量与设置的Reduce任务的数量相同
每个Reduce任务处理一个分区的数据
数据分区的划分规则
key的hashCode值,除以Reduce任务数量后取余数
余数为分区编号,分区编号一样的 key value 对 属于同一个分区
Reduce阶段
对Map阶段的输出结果按照分区进行再一次合并
将同一分区的 key value 对合并到一起
然后按照key排序
排序后按key分组,key value-list
reduce()方法一次只能处理一个 key,value-list 对
Shuffle阶段
Shuffle阶段 在 Map任务输出后,Reduce任务接收前
通过Map任务读取HDFS中的数据块,这些数据块由Map任务以完全并行的方式处理
然后将Map任务的输出进行排序后输入到Reduce任务中
最后Reduce任务将计算的结果输出到HDFS文件系统中
Spark工作原理
典型的Spark作业(Job)工作流程
(1)从数据源(本地文件 HDFS HBase等)读取数据并创建RDD
(2)对RDD进行一系列的转化操作
(3)对最终RDD执行行动操作,开始一系列的计算,产生计算结果
(4)将计算结果发送到Driver端,输出
Spark检查点原理
SparkContext setCheckpointDir()
指定检查点数据的存储路径 通常是放到HDFS中(如果在集群中运行,必须是HDFS目录)
RDD检查点的运行流程
(1)通过SparkContext的setCheckpointDir()方法设置RDD检查点数据的存储路径
(2)调用RDD的checkpoint()方法将RDD标记为检查点
(3)当在RDD上运行一个作业后,会立即触发RDDCheckpointData中的checkpoint()方法
(4)在checkpoint()方法中执行了doCheckpoint()方法
(5)doCheckpoint()方法中执行了writeRDDToCheckpointDirectory()方法
(6)writeRDDToCheckpointDirectory()方法内部通过调用runJob()方法运行一个作业
真正将RDD数据写入到检查点目录中,写入完成后返回一个ReliableCheckpointRDD实例
spark-shell 简单使用
上一篇
下一篇
Spark大数据分析实战 第2章 初识Spark
Spark Standalone 的两种提交方式
Spark大数据分析实战 第3章 RDD弹性分布式数据集
Spark大数据分析实战 第5章 Spark SQL结构化数据处理引擎
Spark大数据分析实战 第6章 Kafka分布式消息系统
Spark大数据分析实战 第7章 Spark Streaming实时流处理引擎