首页  

Spark大数据分析实战 第4章 Spark内核源码分析     所属分类 spark 浏览量 746
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实时流处理引擎