
spark
山高水长~
这个作者很懒,什么都没留下…
展开
-
spark源码--master注册原理
spark源码中,需要在master上进行注册的一共有三种:worker,yarn-cluster模式下的driver,application这次就从worker注册来进入spark源码。由于worker注册是在master中完成的,所以我们进入到org\apache\spark\deploy\master\Master.scala这个类中,找到registerWorker()这个方法开始wo...原创 2019-01-02 23:48:15 · 243 阅读 · 0 评论 -
spark数据本地性
在spark源码(六)–task提交算法的最后,我们提到过决定task运行位置的两个因素:1.task的最佳位置即数据所在位置;2.task的本地化级别。task的本地化级别有5种:PROCESS_LOCAL 进程本地化 相当于数据(partition)和task在同一个executor中NODE_LOCAL 节点本地化 数据和task在一个worker节点上NO_PREF 没有本地化级别...原创 2019-07-30 22:45:50 · 290 阅读 · 0 评论 -
Spark调度系统--Job Scheduling
1.spark调度系统spark的调度框架分为双层。第一层是对application进行资源调度,也就是多个application在集群中运行时怎么给每个application分配资源。这块源码对应之前的spark源码(四)–master资源调度。主要对应的是application包括driver、executor的调度。第二层调度是指每个spark application都会对应若干个job,...翻译 2019-07-30 00:01:45 · 332 阅读 · 0 评论 -
大数据常看的博客
经常看看别人怎么学习,怎么总结,取长补短。chbxw–大数据每个组件都有涉及凯新云技术社区–大数据过往记忆lxw的大数据田地大葱拌豆腐SunnyRivers段智华的博客–spark源码wyqwilliam的博客–道法–自然qq_37050372的博客–大数据入门...原创 2019-07-29 19:26:09 · 177 阅读 · 0 评论 -
spark源码(六)--task提交算法
在完成stage划分之后,spark会以taskSet的方式从前往后提交task。我们来看下DAGScheduler中的submitMissingTasks()方法/*stage是从后往前划分,task是从前往后执行*/ private def submitMissingTasks(stage: Stage, jobId: Int) { val partitionsToCompu...原创 2019-07-18 20:23:03 · 281 阅读 · 0 评论 -
spark源码(三)--worker、application、driver在master上的注册
在确定好master的主备之后,master就要开始处理application、worker以及driver的注册问题了。这同样是在master的receive()方法中完成的。首先,来看看worker的注册 case RegisterWorker( id, workerHost, workerPort, workerRef, cores, memory, workerWeb...原创 2019-07-11 19:14:58 · 288 阅读 · 0 评论 -
spark源码(一)--sparkContext的初始化
在研究spark的源码的时候,个人认为最容易理解的方式就是按照一个程序在spark框架中的执行流程,一步一步的探索源码。那么,我们就要弄清楚,一个程序究竟是怎么执行的。针对一个spark application:1.在自己本地的机器上编写spark代码2.将代码打成jar包,通过spark-sunbmit方式提交到spark集群上去执行3.spark-submit会通过反射创建一个dri...原创 2019-07-05 18:01:18 · 548 阅读 · 0 评论 -
spark源码(五)--job触发流程以及stage划分算法
master在完成资源分配后,运行一个application的条件就成熟了,下面需要解析的就是如何运行一个app。我们之前提到过,在初始化sparkContext中会初始化一个taskScheduler和DAGScheduler,taskScheduler的主要任务是创建task调度池实现task级别的任务调度和联系master进行app注册;DAGScheduler则是面向stage的高层次的调...原创 2019-07-14 22:58:54 · 487 阅读 · 0 评论 -
spark算子map和flatMap的区别
首先,看一下map和flatMap在结果上的差异原始数据都是一个1-5的数组,然后用to方法对里面的每个元素再形成一个数组map算子得到的结果是一个大的数组,里面包含了5个小数组,分别是原数组中每个元素对应形成的数组flatMap算子只得到了一个数组,里面装的是原数组中每个元素形成数组后的新的元素总结:map是对RDD中元素逐一进行函数操作映射为另外一个RDD,而flatMap操作是将...原创 2019-06-28 17:37:56 · 2177 阅读 · 0 评论 -
spark源码(四)--master资源调度
master在处理完worker、application、driver的注册请求之后,就开始对组件 资源进行调度完成spark任务。我们再确认一遍这个过程:首先集群启动之后,Worker会向Master注册,同时携带身份标识和资源情况(如ID,host,port,cpu核数,内存大小),那么这些资源交由Master纳管后,Master会按照一定的资源调度策略分配给Driver和Applicati...原创 2019-07-12 17:57:33 · 298 阅读 · 0 评论 -
spark源码(二)--master持久化引擎以及主备切换
在sparkContext初始化的时候,bankend向mster发送了一个appDesc进行application的注册。master在处理注册信息之前,首先要确认两件事情,1.master用什么引擎进行持久化?2.master如果宕机了该怎么办? 我们根据源码一一来看。找到maste所在路径 core\src\main\scala\org\apache\spark\deploy\master...原创 2019-07-09 00:11:18 · 241 阅读 · 0 评论 -
spark中对key进行操作的算子
groupByKey([numTasks]) : 在一个PairRDD或(k,v)RDD上调用,返回一个(k,Iterable)。主要作用是将key相同的值分组到一个集合序列当中,其中顺序不确定。由于groupByKey会把所有的键值对都加载到内存中进行计算,并且不会进行map端聚合,在正式生产环境中,如果一个键值对对应的数据过多,可能会造成内存溢出。val arr = Array((1,1)...原创 2019-07-02 17:58:12 · 623 阅读 · 0 评论 -
map、mapPartitins、mapPartitionsWithIndex的区别
官网定义:map(func) :返回一个新的 distributed dataset(分布式数据集),它由每个 source(数据源)中的元素应用一个函数 func 来生成。mapPartitions(func) :与 map 类似,但是单独的运行在每个 RDD 的 partition(分区,block)上,所以在一个类型为 T 的 RDD 上运行时 func 必须是 Iterator =&g...原创 2019-07-01 17:34:52 · 577 阅读 · 0 评论 -
知乎实时数仓架构及演进
转载自 https://blog.youkuaiyun.com/weixin_34064653/article/details/89089961“数据智能” (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务。从智能商业的角度来讲,数据的结果代表了用户的反馈,获取结果的及时性就显得尤为重要,快速的获取数据反馈...转载 2019-06-02 18:18:14 · 1376 阅读 · 0 评论 -
大型集群上的快速和通用数据处理架构(摘要)
这本书是spark框架设计者–计算机科学博士Matei Alexandru Zaharia和加州大学伯克利分校教授、主席Scott Shenker撰写的,优快云进行翻译。书中作者主要分析了当前流行的各种计算框架的使用场景以及他们对应的缺点,然后谈了下为什么编写了spark这个框架和spark每个模块详细的设计理念及运行原理,这里是做一部分摘要。1.随着现在需要处理的数据量越来越大,单机处理要向...原创 2019-05-08 11:16:32 · 1902 阅读 · 1 评论 -
spark源码(七)--task执行流程
在执行完task分配算法之后,每个task就分配到对应的executor上了,下一步就是executor启动task。找到executor路径core\src\main\scala\org\apache\spark\executor\Executor.scala 看下launchTask()方法def launchTask(context: ExecutorBackend, taskDescr...原创 2019-07-31 00:08:25 · 312 阅读 · 0 评论