创建或使用现有Session 从Spark 2.0 开始,引入了 SparkSession的概念,创建或使用已有的session 代码如下: val spark = SparkSession .builder .appName("SparkTC") .getOrCreate() 首先,使用了 builder 模式来创建或使用已存在的SparkSession,org.apache.spark.sql.SparkSession.Builder#getOrCreate 代码如下: def g…
引言 在上两篇文章 spark 源码分析之十九 -- DAG的生成和Stage的划分 和 spark 源码分析之二十 -- Stage的提交 中剖析了Spark的DAG的生成,Stage的划分以及Stage转换为TaskSet后的提交. 如下图,我们在前两篇文章中剖析了DAG的构建,Stage的划分以及Stage转换为TaskSet后的提交,本篇文章主要剖析TaskSet被TaskScheduler提交之后的Task的整个执行流程,关于具体Task是如何执行的两种stage对应的Task的执行有…
在<Spark源码分析之Job提交运行总流程概述>一文中,我们提到了,Job提交与运行的第一阶段Stage划分与提交,可以分为三个阶段: 1.Job的调度模型与运行反馈: 2.Stage划分: 3.Stage提交:对应TaskSet的生成. 今天,我们就结合源码来分析下第一个小阶段:Job的调度模型与运行反馈. 首先由DAGScheduler负责将Job提交到事件队列eventProcessLoop中,等待调度执行.入口方法为DAGScheduler的runJon()方法.代码如下: /**…
问题的提出 本篇文章将回答如下问题: 1.  spark任务在执行的时候,其内存是如何管理的? 2. 堆内内存的寻址是如何设计的?是如何避免由于JVM的GC的存在引起的内存地址变化的?其内部的内存缓存池回收机制是如何设计的? 3. 堆外和堆内内存分别是通过什么来分配的?其数据的偏移量是如何计算的? 4. 消费者MemoryConsumer是什么? 5. 数据在内存页中是如何寻址的? 单个任务的内存管理是由 org.apache.spark.memory.TaskMemoryManager 来管理…
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3872785.html  SparkContext是应用启动时创建的Spark上下文对象,是一个重要的入口类.本文主要分析下在SparkContext类创建过程中进行的一些重要操作: 1.创建SparkConf对象 创建SparkConf对象来管理spark应用的属性设置.SparkConf类比较简单,是通过一个Hashap容器来管理key.value类型的属性.…
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3858065.html 为了更深入的了解spark,现开始对spark源码进行分析,本系列文章以spark 1.0.0版本源码作为分析对象.今天主要分析下standalone部署方式的启动过程 1.Spark Standalone组件 Standalone部署方式是一种典型master-slave模式,在这种模式下主要包含三个组件:Master(Cluster Manager).Worker(slave…
mybatis 的初始化还是相对比较复杂,但是作者在初始化过程中使用了多种设计模式,包括建造者.动态代理.策略.外观等,使得代码的逻辑仍然非常清晰,这一点非常值得我们学习: 一.mapper 初始化主要流程 mybatis 初始化的过程中,主要是 XML 配置的解析,不同的部分又分别委托给了不同的解析器: 解析流程为: XMLConfigBuilder -> XMLMapperBuilder -> XMLStatementBuilder -> XMLScriptBuilder ->…
准备 Person实例 @Data public class Person { private String name; private int age; } xml bean配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.…
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3903478.html   本文将以一个简单的WordCount为例来看看Job的提交过程…
前置:这里使用的linux版本是4.8,x86体系. 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 的学习笔记. linux的启动过程有点像是小鱼吃大鱼,最后吃成一个胖子. 计算机中的PC寄存器是用来指示下个执行程序.最开始的时候,pc寄存器都是指向0xfffffff0.这个程序是指向BIOS的POST程序的.POST全称是Power On Self Test,意思是加点自检.过程包括内存检查,系统总线检查等.…