Chai's Blog

Dig deeper

Flink-StreamTask启动流程分析

StreamTask是流作业的任务基类,通常一个流作业的task启动由该方法的invoke函数为入口,本文基于Flink1.11.0该类生命流程进行分析。 StreamTask的构造 StreamTask的的初始化构造方法主要对一些参数进行设置,如configuration,stateBackend,timeService等 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

StreamTask OperatorChain分析

Flink的作业StreamTask是任务执行的核心,其执行的本质即为各个operator的执行,而operator之间又有前后依赖关系,各operator构成一条链条(Chain),各operator顺序执行,完成业务逻辑的执行。如下我们以WordCount为例分析其作业执行(WordCount)源码可参考: WordCount.scala 其业务代码逻辑如下: 1 2 3 4 5 ...

Spark Shufflewrite分析

分布式计算的shuffle操作通常是分布式应用计算性能的瓶颈点,因此一个好的shuffle实现(shuffle write和shuffle read)对于分布式计算引擎的性能起着至关重要的作用。 最新的Spark的shuffleWriter一共有三种(原有的Hash-Based Shuffle已经被删除),分别对应不同的场景。这三种write分别是: UnsafeShuffleWrite...

SparkSQL JOIN选择策略

JOIN是SQL中的重要语义,同时也是SQL操作中逻辑复杂,对性能影响也较大。Spark中也对SQL的JOIN进行了大量的优化。在Spark的优化策略中,有专门针对JOIN的优化(JoinSelection)。 其核心优化逻辑可参考下图: 由于不带等值条件(On 条件)的Join在实际使用中,较少使用,本文只对带有等值条件的join进行分析 一下针对上图中的各个分支进行解析,...

Spark SortShuffleWriter流程分析

Spark的shuffleWriter一共有三种,本文分析 SortShuffleWriter的shuffle写数据过程. SortShuffleWriter是最为复杂的shuffle writer。 在ShuffleMapTask中需要对数据分区内进行排序或者预聚合的场景下,都是使用该writer完成shuffle数据的写盘。 其核心流程分为如下几步: 在ExternalSort...

Spark ByPassMergeSortShuffleHandler流程分析

Spark的shuffleWriter一共有三种,本文分析 ByPassMergeSortShuffleWriter的shuffle写数据过程 从使用场景来看,ByPassMergeSortShuffleWriter主要使用在在ShuffleMapTask侧没有预聚合的场景,且resultTask的个数少于阈值(默认200,由spark.shuffle.sort.bypassMergeTh...

Spark UnsafeShuffleWriter流程分析

Spark的UnsafeShuffleWriter是Tungsten-Project(内存管理)引入的新的Shuffle Writer。 该writer在写数据到磁盘时,会将数据有序写入(仅仅分区间有序,分区内无序)。 本文主要介绍其写数据实现,并讨论其缓存友好设计及实现。以下介绍其相关实现: UnsafeShuffleWriter的实现 各函数类的职责: 1 2 3 Unsafe...

Flink-TaskExecutor内存分析

Flink的TaskExecutor/Container进程主要运行工作线程,其内存管理对Flink作业的运行有重要意义。Flink的TaskExecutor进程的内存配置参数较多,理解较为复杂。本文尝试从Flink源码角度来分析一下进程中各内存大小是如何确定的。 首先看一下进程包含使用的内存分类,如下图: 绿色为JVM堆内存,红色为堆外内存。进程各部分内存均是通过配置参数获取...

Flink-on-Yarn-Per-job分析

JobManager启动分析 JobManager/AM进程启动命令 1 /usr/jdk64/jdk1.8.0_77/bin/java -Xms1448m -Xmx1448m -Dlog.file=/data/hadoop/yarn/log/**application_1581392414078_0311**/container_e67_1581392414078_0311_01_00...

平台开发那些事

平台开发与项目或者一般的基于特定项目应用开发要求不尽一致,项目讲究的是快速上线。在快速开发的过程中难免有欠考虑的情况,但可以通过快速迭代,人肉运维,客户管理等方式维护项目。于此相比,平台开发就没这么幸运了。之所以成为平台开发,目标就是从单一的项目/应用中解脱出来,通过统一的方式完成业务需求,避免重复造轮子。平台开发有以下特点: 生态复杂性:平台开发通常要对接较为复杂的上下游...