
源码分析
一过人_
初出茅庐
展开
-
spark中四个ByKey算子的区别
我们今天又来分析算子的具体实现了,如果只是知道一个方法的是干什么的,对于作用比较相似的方法我们很难分辨应该具体用什么,所以懂了具体的原理,我们就知道在具体业务场景下应用哪个方法更好reduceByKey:参数:func, [numTasks]作用:在一个(K,V)的RDD上调用,返回一个(K,V)的RDD,使用指定的reduce函数,将相同key的值聚合到一起,reduce任务的个数可以通过第二个可选的参数来设置aggregateByKey:参数:(zeroValue:U,[partitione原创 2020-08-01 16:31:53 · 1784 阅读 · 0 评论 -
spark算子中reduceByKey和groupByKey两者的区别
spark中算子应该是重点中的重点了,今天我们来分析一下两个算子reduceByKey和groupByKey这两个算子都属于k-v类型的算子我们先来看看这两个算子的作用是什么?reduceByKey是通过key对数据进行聚合groupByKey是通过key对数据进行分组这两个都需要对数据进行打乱重组,所以都会有shuffle两者的区别:reduceByKey:在shuffle之前有combine(预聚合)操作,返回结果是RDD[k,v]。groupByKey:直接进行shuffle。我原创 2020-08-01 16:29:16 · 1892 阅读 · 0 评论 -
一文搞懂spark中shuffle原理,基于最新版本spark3.0.0源码分析
文章目录前言spark中shuffle机制1 shuffleReader读取数据2 shuffleWriter写数据2.1 shuffle具体写操作3 shuffle的分类3.1 HashShuffle3.1.1 未优化的HashShuffle3.1.2优化的HashShuffle3.2 SortShuffle3.2.1 普通SortShuffle3.2.2 bypass SortShuffle3.2.3 SortShuffle的管理shuffleWriter划分总结:前言在执行Task过程中,我们知原创 2020-08-01 14:45:00 · 3997 阅读 · 3 评论 -
spark最新版本3.0.0中job划分、调度以及任务的提交执行流程源码分析
文章目录前言一 整个任务的流程图示二 任务的划分、调度和执行1 调用行动算子生成job2 划分阶段并发送Task给Executor3 Executor执行Task前言上文我们对spark整个应用运行流程进行了整体的分析,但是后面最后一步关于任务的划分、调度和执行就一笔带过了,今天我们就来对spark任务的执行流程的底层源码分析,搞懂这个会对我们理解spark几个术语有比较清楚的理解了,如:术语描述关系job工作调用一个行动算子就会有一个job生成stage阶段有一原创 2020-07-31 11:16:11 · 1167 阅读 · 3 评论 -
hadoop中关于shuffle机制的源码分析
今天我们来分析一些MR中shuffle阶段的流程源码分析shuffle阶段处于mapper之后reducer之前,是在mapTask的后半部分和reduceTask的前半部分一、MapTask中的shuffle阶段Mapper中调用context.write()方法后mapper的write方法一直进入到MapTask类中的write方法,然后默认分区方法是HashPartitioner类中的方法public int getPartition(K key, V value,原创 2020-07-31 11:01:17 · 1039 阅读 · 4 评论 -
最新版本spark3.0.0中fileText分区数据存储原理
spark中从外部存储系统创建RDDval rdd = sc.textFile("input/2.txt",4)该方法和从内存中创建一样也是有两个参数的def textFile( path: String, minPartitions: Int = defaultMinPartitions): RDD[String] = withScope { assertNotStopped() hadoopFile(path, classOf[TextInputForma原创 2020-07-31 10:48:14 · 758 阅读 · 0 评论 -
最新版本spark3.0.0中mkRDD分区数据存储原理
spark中从内存中创建RDD,也叫从集合中创建有两种方式创建: //第一种 val rdd = sc.parallelize(List(1,2,3,4,5)) //第二种 val rdd = sc.makeRDD(List(1,2,3,4,5))其实在底层makeRDDR方法调用的还是parallelize方法def makeRDD[T: ClassTag]( seq: Seq[T], numSlices: Int = defaultParallelism): RD原创 2020-07-31 10:45:05 · 832 阅读 · 0 评论 -
学完spark一脸懵逼怎么办,基于spark最新版本3.0.0我们来探探spark底层运行原理,看完不懂的来捶我【狗头】
文章目录前言:一 spark应用运行流程图示二 spark应用运行流程源码分析1 提交参数的封装2 反射创建对象3 向yarn发送指令启动AM4 yarn会在某个NM启动AM5 AM启动Driver线程,执行用户类的main方法6 AM向RM注册并申请资源7 RM向AM返回可用资源,AM根据本地化级别分配资源8 AM根据资源访问NM,并启动Executor9 Executor向Driver发送消息,注册Executor(反向注册)——这部分是通信方面的内容,后面会详细在讲解一遍,(3.0.0版本和之前版本原创 2020-07-30 11:51:49 · 1208 阅读 · 1 评论 -
hadoop中MR的切片机制源码分析
上篇关于job提交的源码分析中我们将整体流程大概分析了,本篇重点分析关于其中submit提交过程中对于文件的切片机制进行讨论在JobSubmitter类中200行左右进行了文件分片的处理,进入其中再进入主要的writeNewSplits()方法没有配置的情况下,默认是TextInputFormat,此时调用的是其继承与父类FileInputFormat的getSplits()方法其中具体获取最大值、最小值的方法如下图在切片中最重要的就是如下核心代码:实际读取数据是重写了父类的方法原创 2020-07-29 19:20:45 · 709 阅读 · 0 评论 -
hadoop中MapReduce的job提交流程的源码分析
hadoop中MapReduce的job提交流程的源码分析:业务代码job对象调用提交方法waitForCompletion(),此时进入源码分析流程进入到Job类中的此方法,首先判断任务的状态,如果state == JobState.DEFINE ,就执行submit()方法一、建立连接connect();创建提交Job的代理new Cluster(getConfiguration());判断是本地yarn还是远程initialize(jobTrackAddr, conf);二原创 2020-07-28 15:48:35 · 598 阅读 · 0 评论