`
文章列表
 task 的执行      
Executor     1、反序列化 task  交给 executor 执行       2、org.apache.spark.executor.Executor 的方法:   def launchTask(context: ExecutorBackend,taskId: Long,attemptNumber: Int,taskName: String, serializedTask: ByteBuffer): Unit = { val tr = new TaskRunner(context, taskId ...
TaskScheduler         1、stage创建 taskSet  提交给--> taskScheduler --> 分配给 executor 执行   2、org.apache.spark.scheduler.TaskSchedulerImpl 的 submitTasks 是入口   3、每个taskSet 创建一个 TaskSetManager对象--负责taskSet的监视管理   4、taskSchedulerImpl 的  resourceOffer 执行任务分配算法 将各个task 分配到executor上去       4.1  ...
DAGScheduler 的stage划分     /** org.apache.spark.scheduler.DAGScheduler 中的 submitStage * 提交stage, 先提交缺失的父stage */ private def submitStage(stage: Stage) { val jobId = activeJobForStage(stage) if (jobId.isDefined) { logDebug("submitStage(" + stage + ")&q ...
RDD 转换为 DataFrame--使用编程接口     public static void main(String[] args) { SparkConf conf = new SparkConf().setMaster("local").setAppName("PersonDataFrame"); JavaSparkContext sc = new JavaSparkContext(conf); SQLContext sqlContext = new org.apache.spark.sql.SQLContex ...
 RDD 转换为  DataFrame--使用反射       public static void main(String[] args) { SparkConf conf = new SparkConf().setMaster("local").setAppName("PersonDataFrame"); JavaSparkContext sc = new JavaSparkContext(conf); SQLContext sqlContext = new org.apache.spark.sql.SQ ...
spark SQL入门       进化: hive --> shark --> spark sql   hive--底层依赖于 MR  --给熟悉sql的人用的   shark -- 依赖于hive sql解析器等  比hive快一个数量级   spark sql :   1、多数据源支持 : Hive  RDD JSON JDBC   2、多种性能优化技术:        2.1 内存列存储    2.2 字节码生成技术    2.3 scala代码编写的优化       3、组件扩展:     dataFrame: 以列的方式组织   ...
stage划分     窄依赖 --  每个父RDD的partition  最多被子RDD的一个partition 使用 宽依赖 --  多个子RDD 的partition 依赖于同一个父RDD的 partition     宽依赖 是 划分stage的依据   stage 划分  从触发 action的操作开始向前倒推  若是窄依赖 就是当前的stage 若是宽依赖 就是一个新的 stage   一个stage内部 每个partition都会被分配一个计算任务--task    这些task并行执行   stage之间的依赖关系变成了 大粒度的 DAG   t ...
spark1.3  worker解析       Driver: DriverRunner 创建Driver工作目录、 将用户jar包下载到工作目录中               使用 ProcessBuilder 启动进程                  对Driver的退出状态进行处理 DriverRunner 向他所属的worker 和 actor 发送一个 DriverStateChanged事件  worker 将DriverStateChanged事件 发送给 master   ,master会进行状态改变处理     将Driver从本地缓存移除     ...
spark1.3  资源调度     1、判断当前是否为alive master ,不是直接返回 2、取状态为alive的 worker 并随机打乱 3、首先调度Driver-- yarn-cluster模式下会执行      3.1 当前Driver还没启动的话 ,遍历所有活着的worker  3.2 若这个worker空闲内存 >= Driver需要的内存  并且  worker的空闲cpu数量 >= Driver需要的cpu数量  则 启动Driver       并将Driver从waitingDrivers队列移除          3.2.1 启动 ...
spark1.3  状态改变     Driver: 状态是 错误、完成、被杀掉、失败    将其从 缓存中移除,   向completedDriver中添加Driver,  设置Driver的state、exception  , 将Driver所在的worker移除driver 调用Schedule()方法     executor: -->找到executor对应的 app -->获取app的executors缓存中的executor信息 -->设置executor的当前状态 -->向Driver发送 executorUpdated消息 ...
master注册机制         1、worker注册             1.1  worker启动之后向master注册             1.2  master将状态为dead的worker过滤掉、将状态为unknown 的worker清理掉旧的worker信息 替换为新的worker信息             1.3  master把worker加入内存缓存中             1.4  master使用持久化引擎 将worker信息进行持久化             1.5  调用 Schedule() 方法     2、Driv ...
master的主备切换   主备切换:   1、基于文件系统 2、基于zookeeper   ActiveMaster 挂掉    --> standby master使用持久化引擎(FileSystemPersistenceEngine、ZookeeperPersistenceEngine)                                读取:storedApps、storedDrivers、storedWorkers  --> storedApps、storedDrivers、storedWorkers 有非空的  --> 将使用持 ...
 spark1.3  SparkContext执行过程      
宽依赖与窄依赖   窄依赖:                 是指父RDD的每个分区只被子RDD的一个分区所使用,                 子RDD分区通常对应常数个父RDD分区(O(1),与数据规模无关) 宽依赖: 是指父RDD的每个分区都可能被多个子RDD分区所使用,                 子RDD分区通常对应所有的父RDD分区(O(n),与数据规模有关)      
Global site tag (gtag.js) - Google Analytics