![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
文章平均质量分 74
zhifeng687
这个作者很懒,什么都没留下…
展开
-
spark2.3源码分析之CoarseGrainedExecutorBackend
概述CoarseGrainedExecutorBackend向CoarseGrainedSchedulerBackend端发送的消息主要如下:registerExecutor:注册executor。SchedulerBackend在确认execId可以注册后,回复注册成功的消息。 statusUpdate:汇报Executor中运行的task的状态。CoarseGrainedExec...原创 2018-01-28 22:08:44 · 955 阅读 · 0 评论 -
spark 2.3源码分析之ShuffleDependency
ShuffleDependency成员变量 - ShuffleHandle在ShuffleDependency中创建ShuffleHandle.如前面的博客所述,有以下三种ShuffleHandle:BypassMergeSortShuffleHandle BypassMergeSortShuffleWriter SerializedShuffleHandle Un...原创 2018-09-04 15:50:13 · 1608 阅读 · 0 评论 -
JavaRDDLike.mapPartitions方法
spark java api调用mapPartitions方法的例子如下:package com.dsinpractice.spark.samples.core;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.Java...原创 2017-01-05 22:22:58 · 1451 阅读 · 0 评论 -
spark2.3源码分析之launchTask的流程
CoarseGrainedSchedulerBackend端makeOffers()方法核心流程如下:resourceOffer方法:处理新的executor加入;launchTask方法:构建task// Make fake resource offers on just one executor private def makeOffers(executorId:...原创 2019-06-21 00:45:10 · 723 阅读 · 0 评论 -
spark2.3源码分析之submitTasks的流程
TaskSchedulerImpl概述不同类型的集群对应于不同的SchedulerBackend:YarnSchedulerBackend、StandaloneSchedulerBackend、LocalSchedulerBackend等。TaskSchedulerImpl为不同的SchedulerBackend处理相同的逻辑,例如决定任务之间的调度顺序等。client端必须先调用Ta...原创 2019-06-22 13:26:56 · 922 阅读 · 0 评论 -
spark2.3源码分析之ResultTask读取并处理shuffle file的流程
ResultTask概述ResultTask 执行当前分区的计算,首先从ShuffleMapTask拿到当前partition的数据,会从所有的ShuffleMapTask都拿一遍当前的partition数据。最后合并所有的ResultTask输出结果,返回给driver application。reducer task有几个特点:reducer的数量等于partition的数量. 每个reducer task只处理一个partition的数据量. 如果shuffleMapTask的数原创 2019-06-23 00:13:25 · 695 阅读 · 0 评论 -
spark2.3源码分析之RDD算子combineByKey
概述combineByKey通过使用聚合函数,把键值对中每一个key对应的value进行聚合,将JavaPairRDD[(K, V)]转换成JavaPairRDD[(K, C)]的结果,C是聚合后的类型。用户需要提供以下三个函数:createCombiner:在一个partition中创建每个key对应的累加器的初始值。 mergeValue:在一个partition中,将同一个ke...原创 2017-01-05 22:27:16 · 322 阅读 · 0 评论 -
spark2.3源码分析之server端处理拉取shuffle block请求的流程
ExternalShuffleBlockHandler概述服务端的RPC处理器,可以从executor进程的外部提供shuffle block。处理器注册executor,并且从executor打开shuffle block。shuffle block通过“一对一”策略注册,即传输层的chunk对应于spark应用层的block。成员变量final ExternalShuff...原创 2017-01-04 22:45:22 · 912 阅读 · 0 评论 -
spark2.3源码分析之ResultTask读取并处理shuffle file的流程(二)
概述大部分map task与reduce task的执行是在不同的节点上,reduce执行时需要跨节点去拉取其它节点上的ShuffleMapTask结果,那么对集群内部的网络资源消耗会很严重。我们希望最大化地减少不必要的消耗, 于是对Shuffle过程的期望有:完整地从map task端拉取数据到reduce 端。 在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。 减少磁盘I...原创 2019-07-03 19:56:42 · 865 阅读 · 0 评论 -
spark shuffle易忽略知识点整理
1、spark shuffle file的输出位置如果spark任务运行在yarn架构上,spark shuffle file的输出位置取决于yarn.nodemanager.local-dirs参数如果spark任务运行在单机模式,spark shuffle file的输出位置取决于SPARK_LOCAL_DIRS或者spark.local.dir目录//org.apache.sp...原创 2016-04-13 15:59:57 · 460 阅读 · 0 评论 -
spark2.3源码分析之TaskSetManager
概述TaskSetManager调度一个TaskSet内的所有task。它会跟踪每个task,并在task失败时重试直至一定的次数;通过延迟调度为它的TaskSet执行locality-aware调度。TaskSetManager有2个主要的方法:resourceOffer()方法:该方法会判断TaskSet是否想要运行某个task在某个节点上。statusUpdate()方法:该方法...原创 2017-11-15 11:57:35 · 706 阅读 · 0 评论 -
spark2.3源码分析之RDD的persist流程
概述当根据存储级别缓存RDD时,其实是将RDD数据存储到BlockManager的memoryStore和diskStore。memoryStore最终是通过调用UnifiedMemoryManager#acquireStorageMemory()方法分配storage memory,所以缓存RDD到内存使用的是storage memory的内存。cache()方法时最终调用的是persi...原创 2019-07-31 15:26:09 · 902 阅读 · 1 评论 -
spark2.3源码分析之in-memory collection
AppendOnlyMap概述一个只可以添加数据的hash table的实现。它的key值永远不会删除,而每个key的value值可能会改变。该hash table使用开放探测方法中的二次探测法保存数据,所以内部只有一个数组的数据结构。该hash table的大小始终为2的幂次方,最多可以支持0.7 * 2 ^ 29个元素。该hash table为了内存本地性,在同一个数组中保...原创 2018-08-20 16:31:27 · 565 阅读 · 0 评论 -
spark源码分析之ShuffleExternalSorter
概述ShuffleExternalSorter是专门用于sort-based shuffle的external sorter。传入的record会被追加到data page。当所有的record都已经插入该sorter时,或者当前线程的shuffle memory已经到达阈值时,会使用ShuffleInMemorySorter来根据record的partition id将record排序。...原创 2018-08-09 10:56:29 · 1725 阅读 · 0 评论 -
spark2.3 源码分析之CoarseGrainedSchedulerBackend
概述CoarseGrainedSchedulerBackend是一个阻塞等待coarse-grained executors来连接的SchedulerBackend。该SchedulerBackend会在整个spark-job期间持有每个executor,而不是一个task结束后再为下一个task向Scheduler申请新的executor。executor可以通过多种方式建立,具体的方式由继...原创 2018-01-28 22:34:05 · 1521 阅读 · 0 评论 -
BlockManager架构原理、运行流程图和源码解密
引言BlockManager 是管理整个Spark运行时的数据读写的,当然也包含数据存储本身,在这个基础之上进行读写操作,由于 Spark 本身是分布式的,所以 BlockManager 也是分布式的, BlockManager 原理流程图[下图是 BlockManager 原理流程图] BlockManager 运行實例从 Application 启动的角度来观察BlockManager在 Ap...转载 2016-05-11 16:11:20 · 9325 阅读 · 0 评论 -
Spark Shuffle 中 JVM 内存使用及配置内幕详情
引言Spark 从1.6.x 开始对 JVM 的内存使用作出了一种全新的改变,Spark 1.6.x 以前是基于静态固定的JVM内存使用架构和运行机制,如果你不知道 Spark 到底对 JVM 是怎么使用,你怎么可以很有信心地或者是完全确定地掌握和控制数据的缓存空间呢,所以掌握Spark对JVM的内存使用内幕是至关重要的。很多人对 Spark 的印象是:它是基于内存的,而且可以缓存一大堆数据,显现...转载 2016-05-09 19:23:47 · 1224 阅读 · 1 评论 -
性能调优的本质、Spark资源使用原理和调优要点分析
引言我们谈大数据性能调优,到底在谈什么,它的本质是什么,以及 Spark 在性能调优部份的要点,这两点让在进入性能调优之前都是一个至关重要的问题,它的本质限制了我们调优到底要达到一个什么样的目标或者说我们是从什么本源上进行调优。希望这篇文章能为读者带出以下的启发:了解大数据性能调优的本质了解 Spark 性能调优要点分析了解 Spark 在资源优化上的一些参数调优了解 Spark 的一些比较高效的...转载 2016-04-23 16:48:28 · 774 阅读 · 0 评论 -
浅析 Spark Shuffle 内存使用(解决Spark Shuffle OOM问题)
在使用 Spark 进行计算时,我们经常会碰到作业 (Job) Out Of Memory(OOM) 的情况,而且很大一部分情况是发生在 Shuffle 阶段。那么在 Spark Shuffle 中具体是哪些地方会使用比较多的内存而有可能导致 OOM 呢? 为此,本文将围绕以上问题梳理 Spark 内存管理和 Shuffle 过程中与内存使用相关的知识;然后,简要分析下在 Spark Shuffl...转载 2016-04-22 16:14:04 · 6272 阅读 · 0 评论 -
Spark shuffle调优参数
Spark shuffle是什么Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区,从而得到一个新的RDD。也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分区。现在的spark版本默认使用的是sortshuffle;shuffle在哪里产生shuffle在spark的算子中产生,也就是运行task的时候才会产生shuffle.sortS...转载 2016-04-14 21:37:10 · 579 阅读 · 1 评论 -
spark shuffle调优之map端内存缓冲reduce端内存占比
spark.shuffle.file.buffer,默认32kspark.shuffle.memoryFraction,0.2map端内存缓冲,reduce端内存占比;很多资料、网上视频,都会说,这两个参数,是调节shuffle性能的不二选择,很有效果的样子,实际上,不是这样的。以实际的生产经验来说,这两个参数没有那么重要,往往来说,shuffle的性能不是因为这方面的原因导致的但是,...转载 2016-04-13 15:53:08 · 667 阅读 · 0 评论 -
spark2.3源码分析之UnifiedMemoryManager
概述MemoryManagerMemoryManager是spark的内存管理器,它定义了execution和storage之间共享内存的方式。execution memory指的是在shuffle、join、sort和aggregation过程中使用的内存;storage memory指的是缓存RDD和缓存broadcast广播变量占用的内存。每个JVM中都存在一个MemoryManag...原创 2018-06-03 22:42:03 · 441 阅读 · 0 评论 -
spark源码分析之NioBufferedFileInputStream
NioBufferedFileInputStream是spark实现的一种新的字节流,它既支持内部缓冲区,又支持nio读取文件,使用direct buffer避免java堆与native内存之间的数据拷贝。在Java jdk中没有可供直接使用的具备以上2个功能的字节流。sun.nio.ch.ChannelInputStream虽然支持使用nio读取一个文件,但是不支持缓冲。原创 2018-07-10 18:21:48 · 400 阅读 · 0 评论 -
spark源码分析之TaskMemoryManager
概述TaskMemoryManager用于管理每个task分配的内存。在off-heap内存模式中,可以用64-bit的地址来表示内存地址。在on-heap内存模式中,通过base object的引用 和该对象中64-bit 的偏移量来表示内存地址。当我们想要存储其它结构内部的数据结构的指针时,这是一个问题,例如记录hashmap或者sorting buffer的指针。即使我们使用12...原创 2018-07-31 15:41:57 · 1711 阅读 · 0 评论 -
spark源码分析之ReadAheadInputStream
概述ReadAheadInputStream实现了从当前buffer读取的data耗尽时,切换到另外一个buffer读取数据,并启动任务从底层输入流异步预读data,放入耗尽的buffer中。它通过2个buffer来完成——active buffer和read ahead buffer。在调用read()方法时会返回active buffer中的数据。而read ahead buffer用于从...原创 2018-07-28 11:29:25 · 613 阅读 · 0 评论 -
spark 2.3源码分析之ShuffleInMemorySorter
PackedRecordPointer概述PackedRecordPointer对象用一个64bit的long型变量来记录record信息:[24 bit partition number][13 bit memory page number][27 bit offset in page]。这些record信息用来给ShuffleInMemorySorter排序。该存储格式意...原创 2018-08-14 11:26:15 · 775 阅读 · 0 评论 -
spark源码分析之BypassMergeSortShuffleWriter
概述spark1.6以后,取消了基于hash的shuffle,只剩下基于sort的shuffle。现在只存在以下三种shuffle writer:BypassMergeSortShuffleWriter UnsafeShuffleWriter SortShuffleWriter其中,BypassMergeSortShuffleWriter实现带Hash风格的基于Sort的Shuffl...原创 2018-08-06 11:56:12 · 2524 阅读 · 3 评论 -
spark 2.3源码分析之SortShuffleWriter
SortShuffleWriter概述SortShuffleWriter它主要是判断在Map端是否需要本地进行combine操作。如果需要聚合,则使用PartitionedAppendOnlyMap;如果不进行combine操作,则使用PartitionedPairBuffer添加数据存放于内存中。然后无论哪一种情况都需要判断内存是否足够,如果内存不够而且又申请不到内存,则需要进行本地磁盘...原创 2018-08-20 16:30:54 · 830 阅读 · 0 评论 -
spark源码分析之UnsafeShuffleWriter
概述 SortShuffleManager会判断在满足以下条件时调用UnsafeShuffleWriter,否则降级为使用SortShuffleWriter:Serializer支持relocation。Serializer支持relocation是指,Serializer可以对已经序列化的对象进行排序,这种排序起到的效果和先对数据排序再序列化一致。支持relocation的Seriali...原创 2018-08-06 15:22:07 · 1999 阅读 · 0 评论 -
从亿级数据量的url中找出出现次数最多的前十个url
流程:mapToPair + reduceByKey:计算每个url的出现次数;mapToPair + sortByKey:反转PairRDD,按照降序的方式对url的出现次数进行排序;take():获取前十个url。sparkConf.put("es.resource", indexName + "/" + indexType); sparkConf....原创 2016-10-12 21:20:08 · 2062 阅读 · 0 评论