自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 yarn3.2源码分析之NM端startContainer的资源本地化机制

概述 Container启动过程主要经历三个阶段:资源本地化、启动并运行container、资源回收,其中,资源本地化指创建container工作目录,从HDFS下载运行container所需的各种资源(jar包、可执行文件等)等,而资源回收则是资源本地化的逆过程,它负责清理各种资源。在资源本地...

2019-08-22 17:02:20 454 0

原创 yarn3.2源码分析之ResourceManager基于zk的HA机制

概述 ResourceManager#serviceInit()方法 1、判断是否启动HA。如果yarn.resourcemanager.ha.enabled配置参数为true,则为启动HA。 2、如果启动HA,判断是否启用自动失败重启。如果yarn.resourcemanager.ha.a...

2019-08-14 17:46:56 226 0

原创 spark2.3源码分析之RDD的persist流程

概述 当根据存储级别缓存RDD时,其实是将RDD数据存储到BlockManager的memoryStore和diskStore。memoryStore最终是通过调用UnifiedMemoryManager#acquireStorageMemory()方法分配storage memory,所以缓存...

2019-07-31 15:26:09 327 1

原创 spark2.3源码分析之ResultTask读取并处理shuffle file的流程(二)

概述 大部分map task与reduce task的执行是在不同的节点上,reduce执行时需要跨节点去拉取其它节点上的ShuffleMapTask结果,那么对集群内部的网络资源消耗会很严重。我们希望最大化地减少不必要的消耗, 于是对Shuffle过程的期望有: 完整地从map task端拉...

2019-07-03 19:56:42 301 0

原创 spark2.3源码分析之ResultTask读取并处理shuffle file的流程

ResultTask 概述 ResultTask 执行当前分区的计算,首先从ShuffleMapTask拿到当前partition的数据,会从所有的ShuffleMapTask都拿一遍当前的partition数据。最后合并所有的ResultTask输出结果,返回给driver applicat...

2019-06-23 00:13:25 237 0

原创 spark2.3源码分析之submitTasks的流程

TaskSchedulerImpl 概述 不同类型的集群对应于不同的SchedulerBackend:YarnSchedulerBackend、StandaloneSchedulerBackend、LocalSchedulerBackend等。TaskSchedulerImpl为不同的Sche...

2019-06-22 13:26:56 121 0

原创 spark2.3源码分析之launchTask的流程

CoarseGrainedSchedulerBackend端 makeOffers()方法 核心流程如下: resourceOffer方法:处理新的executor加入; launchTask方法:构建task // Make fake resource offers on just ...

2019-06-21 00:45:10 174 0

原创 记一次java进程占用内存高,Netty中的buffer一直没被gc的排查

最近发现一个项目在部署到机器上的时候,机器内存一直占用很高。 接着开始排查机器内存高的原因 1、查找机器上占用内存高的进程 ps aux |sort -k4nr|head -20查找占用内存高的前20个进程 发现前20个进程平均每个进程占用内存3g,总共就占用了60g。每个进程占用内存...

2019-05-16 16:48:14 1256 0

原创 yarn3.2源码分析之NM端startContainer的流程(二)

概述 NM端startContainer会经历一系列event: request_resource_localization类型的LocalizerEvent LocalizerTracker是LocalizerEvent的事件处理器。LocalizerTracker根据资源的类型进行资源本...

2019-05-12 00:28:11 132 0

原创 yarn3.2源码分析之NM端startContainer的流程

概述 NM端启动container会经过一系列event: initApplication类型的ApplicationEvent init_application_resources类型的LocalizationEvent ResourceLocalizationService是Local...

2019-05-10 17:56:56 243 0

原创 yarn3.2源码分析之YarnClient与ResourceManager通信之submitApplication(四)

概述 submitApplication会经历的event:launch类型的AMLaucherEvent ApplicationMasterLauncher处理launch类型的AMLaucherEvent ResourceManager的内部类RMActiveService为AsyncD...

2019-05-09 18:24:16 96 0

原创 yarn3.2源码分析之YarnClient与ResourceManager通信之submitApplication(三)

概述 submitApplication会经过一系列Event: app_accepted类型的RMAppEvent start类型的RMAppAttemptEvent appAttemptAdd类型的SchedulerEvent AttemptAdded类型的RMAppAttemptE...

2019-05-09 15:37:18 66 0

原创 yarn3.2源码分析之YarnClient与ResourceManager通信之submitApplication(二)

概述 submitApplication会经历一系列Event: start类型的RMAppEvent storeApp类型的RMStateStoreEvent newSaved类型的RMAppEvent appAdded类型的SchedulerEvent Accepted类型的RMA...

2019-05-07 18:22:25 79 0

原创 yarn3.2源码分析之YarnClient与ResourceManager通信之submitApplication

概述 YarnClient通过ApplicationClientProtocol与ResourceManager通信。YarnClient通过它完成向RM提交应用程序、查看应用程序状态、控制应用程序(杀死)等。在ResourceManager中,负责与YarnClient通信的组件是Client...

2019-04-21 11:22:53 358 0

原创 yarn 3.2源码分析之NM端launchContainer事件流程

概述 NM端launch container会经历的event:LaunchContainer类型的ContainersLaunchEvent yarn application会因为container分配失败而导致application failed,以下日志可以大概得知launch cont...

2019-04-19 15:32:56 378 0

原创 yarn 3.2源码分析之ResourceManager

概述 ResourceManager是一系列组件的集合。它会加载core-site.xml和yarn-site.xml,同时创建yarn scheduler、RMAppManager等一系列组件。 创建yarn scheduler 获取yarn.resourcemanager.sched...

2019-04-15 18:15:22 266 0

原创 yarn3.2 源码分析之FairScheduler连续调度和assignContainer流程

概述 FairScheduler分配container的核心调度流程 核心调度流程如下: 调度器锁住FairScheduler对象,避免核心数据结构冲突。 调度器选取集群的一个节点(node),从树形队列的根节点ROOT开始出发,每层队列都会按照公平策略选择一个子队列,最后在叶子队列按照公...

2019-04-15 11:42:46 373 0

原创 yarn3.2源码分析之moveApplication事件流程

概述 yarn3.2moveApplication事件 不再经过中央异步调度器AsyncDispatcher和状态机StateMachineFactory,直接由RMAppManager直接调用scheduler处理moveApplication事件。 yarn 2.6应用转移到到其它队列...

2019-04-12 23:34:25 214 0

原创 kafka2.2源码分析之BufferPool

概述 BufferPool是缓存给定memory大小的ByteBuffer池。这个类主要应用于Producer的需求。因此,它有以下2个属性: 只有符合pooled size大小的ByteBuffer会被缓存并循环使用。 BufferPool是公平的,内存优先给等待时间最长的线程使用,除非...

2019-04-11 20:48:58 125 0

原创 kafka2.2源码分析之KafkaChannel

概述 KakfaChannel基本是对SocketChannel的封装,只是这个中间多个一个间接层:TransportLayer,为了封装普通和加密的Channel。TransportLayer子类有PlaintextTransportLayer和SslTransportLayer,分别对应普通...

2019-03-31 19:45:13 282 0

原创 yarn2.7源码分析之ApplicationMaster与ResourceManager.ApplicationMasterService的通信

概述 ApplicationMaster与ResourceManager之间通信主要有以下三个步骤: 1、ApplicationMaster通过rpc向ResourceManager注册。ApplicationMaster启动时,首先向ResourceManager注册,注册消息封装到Proto...

2019-02-18 15:03:17 456 0

原创 hadoop-common2.7源码分析之ProtobufRpcEngine(RPC实现)

概述 ProtobufRpcEngine是在RPC通信过程中,使用ptotobuf作为数据交换格式的RPC实现类。 对ProtobufRpcEngine的源码分析将围绕RPC概念模型展开。 RPC概念模型  RPC调用流程如下: RPC 服务端通过 RpcServer 去导出(exp...

2019-02-13 23:42:11 340 0

原创 hadoop 2.7源码分析之RecordFactory

概述 hadoop使用了protobuf作为默认的数据交换格式,但是hadoop也实现了插拔机制,允许用户使用其它的格式,如thrift等。所以,hadoop在制定接口和实现基于protobuf的底层模块时,使用了抽象工厂模式,并使用java反射对抽象工厂模式加以优化。 抽象工厂模式 抽象工...

2019-02-01 17:19:20 126 0

原创 java NIO 之ServerSocketChannel源码分析

ServerSocketChannel的使用示例如下: //1. 获取服务端通道 ServerSocketChannel ssChannel = ServerSocketChannel.open(); ssChannel.bind(new InetSocketA...

2019-01-01 19:28:49 371 1

原创 spark 2.3源码分析之ShuffleDependency

ShuffleDependency 成员变量 - ShuffleHandle 在ShuffleDependency中创建ShuffleHandle. 如前面的博客所述,有以下三种ShuffleHandle: BypassMergeSortShuffleHandle BypassMer...

2018-09-04 15:50:13 625 0

原创 spark2.3源码分析之in-memory collection

AppendOnlyMap 概述 一个只可以添加数据的hash table的实现。它的key值永远不会删除,而每个key的value值可能会改变。 该hash table使用开放探测方法中的二次探测法保存数据,所以内部只有一个数组的数据结构。 该hash table的大小始终为2的幂次方,...

2018-08-20 16:31:27 260 0

原创 spark 2.3源码分析之SortShuffleWriter

SortShuffleWriter 概述 SortShuffleWriter它主要是判断在Map端是否需要本地进行combine操作。如果需要聚合,则使用PartitionedAppendOnlyMap;如果不进行combine操作,则使用PartitionedPairBuffer添加数据存放...

2018-08-20 16:30:54 328 0

原创 spark 2.3源码分析之ShuffleInMemorySorter

  PackedRecordPointer 概述 PackedRecordPointer对象用一个64bit的long型变量来记录record信息: [24 bit partition number][13 bit memory page number][27 bit offset in ...

2018-08-14 11:26:15 355 0

原创 spark源码分析之ShuffleExternalSorter

概述 ShuffleExternalSorter是专门用于sort-based shuffle的external sorter。 传入的record会被追加到data page。当所有的record都已经插入该sorter时,或者当前线程的shuffle memory已经到达阈值时,会使用Sh...

2018-08-09 10:56:29 654 0

原创 spark源码分析之UnsafeShuffleWriter

概述  SortShuffleManager会判断在满足以下条件时调用UnsafeShuffleWriter,否则降级为使用SortShuffleWriter: Serializer支持relocation。Serializer支持relocation是指,Serializer可以对已经序列化...

2018-08-06 15:22:07 851 0

原创 spark源码分析之BypassMergeSortShuffleWriter

概述 spark1.6以后,取消了基于hash的shuffle,只剩下基于sort的shuffle。现在只存在以下三种shuffle writer: BypassMergeSortShuffleWriter UnsafeShuffleWriter SortShuffleWriter 其中,...

2018-08-06 11:56:12 1210 3

转载 jvm源码分析之oop-klass对象模型

概述 HotSpot是基于c++实现,而c++是一门面向对象的语言,本身具备面向对象基本特征,所以Java中的对象表示,最简单的做法是为每个Java类生成一个c++类与之对应。 但HotSpot JVM并没有这么做,而是设计了一个OOP-Klass Model。这里的 OOP 指的是 Ordi...

2018-08-01 18:51:37 692 0

原创 spark源码分析之TaskMemoryManager

概述 TaskMemoryManager用于管理每个task分配的内存。 在off-heap内存模式中,可以用64-bit的地址来表示内存地址。在on-heap内存模式中,通过base object的引用 和该对象中64-bit 的偏移量来表示内存地址。 当我们想要存储其它结构内部的数据结构...

2018-07-31 15:41:57 818 0

原创 FutureTask源码分析

Future接口 概述 Future接口代表异步计算的结果,它提供了检查计算是否完成,取消计算执行,等待计算完成并检索计算结果的方法。 如果你出于可取消计算执行的目的使用Future,但又不想返回结果,可以使用Future<?>数据类型,并使用null作为底层任务...

2018-07-29 22:22:28 133 0

原创 spark源码分析之ReadAheadInputStream

概述 ReadAheadInputStream实现了从当前buffer读取的data耗尽时,切换到另外一个buffer读取数据,并启动任务从底层输入流异步预读data,放入耗尽的buffer中。它通过2个buffer来完成——active buffer和read ahead buffer。在调用...

2018-07-28 11:29:25 167 0

原创 AbstractQueuedSynchronizer源码分析之共享锁实现

doAcquireShared()方法 该方法在共享模式以不响应中断的方式阻塞等待获取锁,实现如下: 1、将当前线程封装成节点入队; 2、在死循环中调用park方法。第一次循环(自旋、acquire loop),或者被唤醒从park方法返回后,会判断前驱节点是否是头节点,以及调用tryAcqui...

2018-07-24 18:02:07 200 0

原创 Condition源码分析

Condition接口 概述 condition与Lock的实现类结合使用。 如果Lock替换了synchronized方法和语句的使用,则Condition将替换Object监视方法(wait,notify和notifyAll)的使用。 condition,也称为condition que...

2018-07-20 16:08:54 846 1

原创 jvm源码分析之interrupt()

概述 线程的thread.interrupt()方法是中断线程。中断一个线程意味着在线程完成它的任务之前,停止它当前正在执行的操作。 如果线程堵塞在object.wait、Thread.join和Thread.sleep,将会清除线程的中断状态,并抛出InterruptedException;...

2018-07-19 11:54:41 629 0

原创 pthread_cond_signal

pthread_cond_broadcast, pthread_cond_signal - broadcast or signal a condition 语法 #include <pthread.h> int pthread_cond_broadcast(pth...

2018-07-17 11:20:11 1531 0

原创 pthread_cond_wait

pthread_cond_timedwait()和pthread_cond_wait()函数会阻塞在条件变量上。它们应和互斥锁(mutex lock)一起使用。pthread_cond_wait内部操作这些函数以原子方式释放互斥锁,并导致调用线程阻塞条件变量cond。这里的原子性考虑到了被其它线程...

2018-07-16 15:22:01 295 0

提示
确定要删除当前文章?
取消 删除