Spark大数据平台源码分析
源码分析Spark的集群、算子、Core、Shuffle等相关核心概念,算法
raintungli
这个作者很懒,什么都没留下…
展开
-
大数据:Spark Standalone 集群调度(一)从远程调试开始说application创建
远程debug,特别是在集群方式时候,会很方便了解代码的运行方式,这也是码农比较喜欢的方式虽然scala的语法和java不一样,但是scala是运行在JVM虚拟机上的,也就是scala最后编译成字节码运行在JVM上,那么远程调试方式就是JVM调试方式在服务器端:-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=7001原创 2017-03-09 17:41:55 · 5176 阅读 · 0 评论 -
大数据:Spark Standalone 集群调度(二)如何创建、分配Executors的资源
Standalone 的整体架构在Spark集群中的3个角色Client, Master, Worker, 下面的图是Client Submit 一个任务的流程图:完整的流程:Driver 提交任务给Master, 由Master节点根据任务的参数对进行Worker的Executor的分配,Worker节点获取到具体的分配信息启动executor 的子进程Master分原创 2017-03-29 17:37:33 · 5034 阅读 · 5 评论 -
大数据:Spark Standalone 集群调度(三)多Master节点的可用性
1. Master 单节点可用性Master节点在Spark中所承载的作用是分配Application到Worker节点,维护Worker节点,Driver,Application的状态。在Spark中,Master本身也提供了基于硬盘的单节点的可用性,也就是可以直接通过重启Master,Master通过读取硬盘里保存的状态,进行单节点的恢复。原创 2017-04-01 09:37:53 · 9799 阅读 · 0 评论 -
大数据:Spark Core (一) 什么是RDD的Transformation和Actions以及Dependency?
Spark的RDDRDD(Resilient Distributed Datasets),弹性分布式数据集,是对分布式数据集的一种抽象。RDD所具备5个主要特性:一组分区计算每一个数据分片的函数RDD上的一组依赖对于Key Value 对的RDD,会有一个Partitioner, 这是数据的分割器一组Preferred Location信息上图是一个简单的CoGroupedRDD满足了RDD 5个原创 2017-04-07 17:21:36 · 3629 阅读 · 0 评论 -
大数据:Spark Core(二)Driver上的Task的生成、分配、调度
1. 什么是Task?在前面的章节里描述过几个角色,Driver(Client),Master,Worker(Executor),Driver会提交Application到Master进行Worker上的Executor上的调度,显然这些都不是Task.Spark上的几个关系可以这样理解:Application: Application是Driver在构建SparkContent的上下文的时候创建的,就像申报员,现在要构建一个能完成任务的集群,需要申报的是这次需要多少个Executor(可以简单理解原创 2017-04-14 09:21:46 · 10672 阅读 · 0 评论 -
大数据:Spark Core(三)Executor上是如何launch task
1. 启动任务在前面一篇博客中(http://blog.csdn.net/raintungli/article/details/70168241#t9)介绍了Driver是如何调动、启动任务的,Driver向Executor发送了LaunchTask的消息,Executor接收到了LaunchTask的消息后,进行了任务的启动,在CoarseGrainedExecutorBackend.scala原创 2017-04-19 17:48:23 · 4315 阅读 · 1 评论 -
大数据:Spark Core(四)用LogQuery的例子来说明Executor是如何运算RDD的算子
1. 究竟是怎么运行的?很多的博客里大量的讲了什么是RDD, Dependency, Shuffle... 但是究竟那些Executor是怎么运行你提交的代码段的?下面是一个日志分析的例子,来自Spark的example def main(args: Array[String]) { val sparkConf = new SparkConf().setAppName("Log Quer原创 2017-04-22 23:15:19 · 3404 阅读 · 0 评论 -
大数据:Spark Storage(一) 集群下的区块管理
Storage模块在Spark中提及最多的是RDD,而RDD所交互的数据是通过Storage来实现和管理Storage模块整体架构1. 存储层在Spark里,单机storage的管理是通过block来管理的,用每个块的存储可以在内存里或者在磁盘中,在BlockManager里既可以管理内存的存储,同时也管理硬盘的存储,存储的标识是通过块的ID来区分的。原创 2017-03-21 09:26:48 · 6025 阅读 · 1 评论 -
大数据:Spark Storage(二) 集群下的broadcast
Spark BroadCastBroadcast 简单来说就是将数据从一个节点复制到其他各个节点,常见用于数据复制到节点本地用于计算,在前面一章中讨论过Storage模块中BlockManager,Block既可以保存在内存中,也可以保存在磁盘中,当Executor节点本地没有数据,通过Driver去获取数据Spark的官方描述:A broadcast variable. Broadc原创 2017-03-21 17:28:21 · 4411 阅读 · 0 评论 -
大数据:Spark Shuffle(一)ShuffleWrite:Executor如何将Shuffle的结果进行归并写到数据文件中去
1. 前序关于Executor如何运行算子,请参考前面博文:大数据:Spark Core(四)用LogQuery的例子来说明Executor是如何运算RDD的算子,当Executor进行reduce运算的时候,生成运算结果的临时Shuffle,并保存在磁盘中,被最后的Action算子调用,而这个阶段就是在ShuffleMapTask里执行的。原创 2017-04-27 11:44:32 · 7477 阅读 · 1 评论 -
大数据:Spark Shuffle(二)Executor、Driver之间Shuffle结果消息传递、追踪
1. 前言在博客里介绍了ShuffleWrite关于shuffleMapTask如何运行,输出Shuffle结果到文件Shuffle_shuffleId_mapId_reduceId.data文件中,每个executor需要向Driver汇报当前节点的Shuffle结果状态,Driver保存结果信息进行下个Task的调度。2. StatusUpdate消息当Executor运行完Task的时候需要原创 2017-05-03 15:07:08 · 4406 阅读 · 1 评论 -
大数据:Spark Shuffle(三)Executor是如何fetch shuffle的数据文件
1. 前言在前面的博客中讨论了Executor, Driver之间如何汇报Executor生成的Shuffle的数据文件,以及Executor获取到Shuffle的数据文件的分布,那么Executor是如何获取到Shuffle的数据文件进行Action的算子的计算呢?在ResultTask中,Executor通过MapOutPutTracker向Driver获取了ShuffID的Shuffle数据原创 2017-05-09 17:13:48 · 4445 阅读 · 4 评论 -
大数据:Spark mlib(一) KMeans聚类算法源码分析
1. 聚类1.1 什么是聚类?所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用算法将集合D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高,其中每个子集叫做一个簇。1.2 KMeans 聚类算法K-Means聚类算法主要分为如下几个步骤:从D中随机取k个元素,作为k个簇的各自的中心分别计算剩下的元素到k个簇中心的相异度,将这些元素分原创 2017-06-09 12:22:17 · 6540 阅读 · 0 评论 -
大数据:Spark mlib(二) Naive bayes朴素贝叶斯分类之多元朴素贝叶斯源码分析
1. 什么是朴素贝叶斯朴素贝叶斯是一种构建分类器,该分类器基于一个理论:所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关2. 朴素贝叶斯概率模型概率模型分类器是一个条件概率模型:(独立的类别特征C有若干类别,条件依赖于若干特征变量F1,F2,...,Fn) 贝叶斯定理: 我们可以看到分母并不依赖于C,而且特征Fn的概率是给定的,分母可以认为是一个常数。这样分子就等价于联合分布模原创 2017-06-23 14:36:26 · 3142 阅读 · 0 评论 -
大数据:Spark mlib(三) GradientDescent梯度下降算法之Spark实现
1. 什么是梯度下降?梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。先来看两个函数:1. 拟合函数:θ" role="presentation" style="display: inline; line-he原创 2017-07-10 15:24:34 · 4062 阅读 · 0 评论 -
大数据:Spark 算子(一)排序算子sortByKey来看大数据平台下如何做排序
1 前言在前面一系列博客中,特别在Shuffle博客系列中,曾今描述过在生成ShuffleWrite的文件的时候,对每个partition会先进行排序并spill到文件中,最后合并成ShuffleWrite的文件,也就是每个Partition里的内容已经进行了排序,在最后的action操作的时候需要对每个executor生成的shuffle文件相同的Partition进行合并,完成Action的操原创 2017-06-26 16:42:13 · 8946 阅读 · 0 评论