本系列主要描述Spark Streaming的运行流程,然后对每个流程的源码分别进行解析 之前总听同事说Spark源码有多么棒,咱也不知道,就是疯狂点头.今天也来撸一下Spark源码. 对Spark的使用也就是Spark Streaming使用的多一点,所以就拿Spark Streaming开涮. 源码中的一些类 这里先列举一些源码中的类,大家先预热一下. StreamingContext:这是Spark Streaming程序的入口,提供了运行时上下文环境 DStream:是RDD在Spark…
Spark Streaming揭秘 Day26 JobGenerator源码图解 今天主要解析一下JobGenerator,它相当于一个转换器,和机器学习的pipeline比较类似,因为最终运行在SparkCore上,作为应用程序,需要开发者提供一些信息才能够运行. 简述 JobGenerator这个类会负责从DStream中产生Jobs,同时进行checkpoint和清理数据. JobGenerator的核心是一个钟,这里采用反射生成,并提供给定时器,根据周期性触发事件 generateJob…
Spark Streaming揭秘 Day22 架构源码图解 今天主要是通过图解的方式,对SparkStreaming的架构进行一下回顾. 下面这个是其官方标准的流程描述. SparkStreaming会源源不断的接收数据源,然后根据时间切割成不同的Batch,每个Batch都会产生RDD,RDD运行在Spark的引擎之上,处理会产生运行的结果. 我们对其进行细化,可以分解为8个步骤: Step1:获取外部数据源,最经典的来源于Kafka,其它例如Flume.数据库.HBase等 Step2.3…
转自 Android 全面插件化 RePlugin 流程与源码解析 RePlugin,360开源的全面插件化框架,按照官网说的,其目的是“尽可能多的让模块变成插件”,并在很稳定的前提下,尽可能像开发普通App那样灵活.那么下面就让我们一起深入♂了解它吧. (ps :阅读本文请多参考源码图片 ( ̄^ ̄)ゞ ) 一.介绍 RePlugin对比其他插件化,它的强大和特色,在于它只Hook住了ClassLoader.One Hook这个坚持,最大程度保证了稳定性.兼容性和可维护性,详见<全面插件化——R…
前端的童鞋对grunt应该不陌生,前面也陆陆续续的写了几篇grunt入门的文章.本篇文章会更进一步,对grunt的源码进行分析.文章大体内容内容如下: grunt整体设计概览 grunt-cli源码分析 grunt-cli模块概览 grunt-cli源码分析 写在后面…
本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口之间的配合. 1. Client和NN Client到NN有大量的元数据操作,比如修改文件名,在给定目录下创建一个子目录,这些操作一般只涉及Client和NN的交互,通过IPC调用ClientProtocol进行.创建子目录的逻辑流程如下图: 从图中可见,创建子目录这种操作并没有涉及DN.因为元数据会被NN持久化到edits中,因此在持久化结束之后,这个调用就会被成功返回.复习一下:NN维护了HDFS…
本篇从二个方面进行源码分析: 一.updateStateByKey解密 二.mapWithState解密 通过对Spark研究角度来研究jvm.分布式.图计算.架构设计.软件工程思想,可以学到很多东西. 进行黑名单动态生成和过滤例子中会用到updateStateByKey方法,此方法在DStream类中没有定义,需要在 DStream的object区域通过隐式转换来找,如下面的代码: object DStream {   // `toPairDStreamFunctions` was in Sp…
本篇源码基于赵星对Spark 1.3.1解析进行整理.话说,我不认为我这下文源码的排版很好,不能适应的还是看总结吧. 虽然1.3.1有点老了,但对于standalone模式下的Master.Worker和划分stage的理解是很有帮助的.=====================================================总结: master和worker都要创建ActorSystem来创建自身的Actor对象,master内部维护了一个保存workerinfo的hashSe…
MemoryManager内存管理器 内存管理器可以说是spark内核中最重要的基础模块之一,shuffle时的排序,rdd缓存,展开内存,广播变量,Task运行结果的存储等等,凡是需要使用内存的地方都需要向内存管理器定额申请.我认为内存管理器的主要作用是为了尽可能减小内存溢出的同时提高内存利用率.旧版本的spark的内存管理是静态内存管理器StaticMemoryManager,而新版本(应该是从1.6之后吧,记不清了)则改成了统一内存管理器UnifiedMemoryManager,同一内存管…
本课主题 Broadcast 运行原理图 Broadcast 源码解析 Broadcast 运行原理图 Broadcast 就是将数据从一个节点发送到其他的节点上; 例如 Driver 上有一张表,而 Executor 中的每个并行执行的Task (100万个Task) 都要查询这张表的话,那我们通过 Broadcast 的方式就只需要往每个Executor 把这张表发送一次就行了,Executor 中的每个运行的 Task 查询这张唯一的表,而不是每次执行的时候都从 Driver 中获得这张表…