Spark-源码学习-SparkSession-ShareState
一、概述ShareState 负责保存多个有效 session 之间的共享状态。SharedState 中包含变量: warehousePath、cacheManager、statusStore、externalCatalog、globalTempViewManager、jarClassLoader。这些变量对于所有的 SparkSession 都是公用的。
二、初始化123lazy val sharedState: SharedState = { existingSharedState.getOrElse(new SharedState(sparkContext, initialSessionOptions))}
综上可以看出,SparkSession 重用 sharedState,但是会新 $clone$ 或者创建新的 sessionState,但是如果在创建多个 SparkSession 时,传入的 existingSharedState 都为空,则多个 SparkSession 也会创建多个 sharedState。
2.1. 解析和处理 S ...
Flink-源码学习-FlinkCore-公共基础服务-HA 服务
一、概述对于 7x24 小时不间断运行的流式系统来讲,保证集群核心组件的高可用是非常重要的。Flink 集群在运行时中主要通过 HighAvailabilityServices 公共基础服务来创建和初始化核心组件的高可用服务
二、 HighAvailabilityServices当启动集群运行时的时候,会初始化 HighAvailabilityServices 高可用基础服务实现。ClusterEntrypoint 会在 initializeServices() 方法中调用 createHaServices() 方法创建 HighAvailabilityServices。
1haServices = createHaServices(configuration, ioExecutor);
HighAvailabilityServices 主要分为 AbstractNonHaServices 和 ZooKeeperHaServices 两种类型,
AbstractNonHaServices 实际上不提供高可用能力
ZooKeeperHaServices 通过 ZooKeeper ...
Flink-源码学习-HA 服务
一、概述对于 7x24 小时不间断运行的流式系统来讲,保证集群核心组件的高可用是非常重要的。Flink 集群在运行时中主要通过 HighAvailabilityServices 公共基础服务来创建和初始化核心组件的高可用服务
二、 HighAvailabilityServices当启动集群运行时的时候,会初始化 HighAvailabilityServices 高可用基础服务实现。ClusterEntrypoint 会在 initializeServices() 方法中调用 createHaServices() 方法创建 HighAvailabilityServices。
1haServices = createHaServices(configuration, ioExecutor);
HighAvailabilityServices 主要分为 AbstractNonHaServices 和 ZooKeeperHaServices 两种类型,
AbstractNonHaServices 实际上不提供高可用能力
ZooKeeperHaServices 通过 ZooKeeper ...
Spark-源码学习-SparkSession 设计
一、概述SparkSession 是 Spark 程序的新入口。在 Spark2.0 之前,使用 Spark 需要先创建 SparkConf 和 SparkContext,Spark 2.0 中引入了 SparkSession,为用户提供了一个统一的切入点来使用 Spark 的各项功能。 SparkConf、SparkContext 和 SQLContext 被封装在 SparkSession 中,使用 Spark 的各项功能只需创建一个 SparkSession。
在 Spark 的早期版本,SparkContext 是进入 Spark 的切入点。RDD 的创建和操作得使用 SparkContext 提供的 API; 对于 RDD 之外的其他东西,需要使用其他的 Context。比如流处理使用 StreamingContext; 对于 SQL 得使用 SQLContext; 而对于 Hive 得使用 HiveContext。
二、设计SparkSession 的设计遵循了工厂设计模式,Spark 程序中首先使用 $SparkSession.builder$ 对象进行一系列 ...
Spark-源码学习-SparkSession-SessionState
一、概述SessionState 是基于一个特定 SparkSession 维护所有单个 session 作用域的所有状态,SessionState 维护了 SparkSQL 中大部分的核心类,如 SqlParser、Analyzer、Optimizer 等,SparkSession 将 SQL Query Planning 功能托管给 SessionState。
二、初始化SparkSession 构造函数中传入 parentSessionState,对其进行 $clone$ ,若传入不为空,则使用 $clone$ 对象。否则进行创建。
123456789lazy val sessionState: SessionState = { parentSessionState.map(_.clone(this)).getOrElse { val state = SparkSession.instantiateSessionState( SparkSession.sessionStateClassName(sharedState.conf), ...
Flink-源码学习-集群启动-taskmanager-注册
ResourceManager 作为统一的集群资源管理器,用于管理整个集群的计算资源,包括 CPU 资源、内存资源等。同时,ResourceManager 负责向集群资源管理器中申请容器资源启动 TaskManager 实例,并对 TaskManager 进行集中管理。当新的作业提交到集群后,JobManager 会向 ResourceManager 申请作业执行需要的计算资源,进而完成整个作业的运行
让我们看看注册机制源码👀😈~~~
一、概述当 TaskManager 所在的RPC 服务启动后,TaskManager 会和 ResourceManager之间创建RPC连接,此时TaskManager将自身的信息注册到 ResourceManager 中,并长期保持 与 ResourceManager 之间的心跳连接。ResourceManager 接收到TaskManager的注册信息后,将TaskManager资源信息存储在 SlotManager 服务中进行管理。
二、源码在TaskExecutor.startTaskExecutorServices()方法中,主要通过
...
Flink-源码学习-集群启动-standalone-taskmanager
作为整个运行时的工作节点,TaskManager 提供了作业运行过程中需要的Slot 计算资源,JobManager中提交的Task实例都会运行在TaskManager组件上,我们看看TaskManager的启动源码👀~~~
一、概述在这个 TaskManager 启动过程中,最重要的事情,就是在 TaskManager初始化了一些基础服务和一些 对外提供服务的核心服务,向 JobManager 进行 TaskManager 的注册,并且在注册成功之后,维持 TaskManager 和 JobManager 的心跳,从JobManager 接收需要部署的任务,使用 Slot 资源启动 Task
二、启动根据以上的启动脚本分析来到 TaskManagerRunner#main()~~~
看看时序图👀~~~,直接进入 核心代码 runTaskManager()
在 runTaskManagerSecurely()实例化并启动了 TaskManagerRunner,其中构建 TaskManagerRunner 实例大致做了三件事~
12final TaskManagerRunn ...
Flink-源码学习-集群启动-taskmanager-TaskManagerServices
TaskManagerServices.fromConfiguration() 进来之后,然后这个里面呃做的事挺多挺多😯~~~
一、概述根据已有信息创建 TaskManagerServicesConfiguration 实例,这些参数都会用于创建 TaskExecutor 实例,TaskManagerServices 包含了 TaskExecutor 创建过程中需要的全部服务,如 shuffleEnvironment、jobLeaderService 等。
二、源码开始源码啦~~~
2.1. 工作目录检查检查 temp.dir 目录是否存在,如果不存在会创建文件夹
1checkTempDirs(taskManagerServicesConfiguration.getTmpDirPaths());
flink.yaml 中 io.tmp.dirs 值
目录是否存在
12345if(!file.exists()) { if(!file.mkdirs()) { throw new IOException(""); & ...
Flink-源码学习-集群启动-taskmanager-心跳
在注册成功之后,TaskManager 和 JobManager(ResourceManager) 通过心跳机制保持连接。让我们看看心跳机制源码👀😈~~~
一、概述在这个 TaskManager 启动过程中,最重要的事情,就是在 TaskManager初始化了一些基础服务和一些 对外提供服务的核心服务之后就启动 TaskExecutor,向 JobManager(ResourceManager) 进行 TaskManager 的注册,并且在注册成功之后,维持 TaskManager 和 JobManager(ResourceManager) 的心跳。
二、源码TaskExecutor 向 ResourceManager 注册成功之后,会给这个 TaskExecutor 生成一个 HeartbeatTarget,每一个 TaskExecutor 都有一个唯一的 HeartbeatTarget 对象,这个 HeartbeatTarget 会被封装为 HeartbeatMonitor
最终,每个 TaskExecutor 对应的一个唯一的 HeartbeatMonitor 就被保存 ...
数据湖-Iceberg-源码学习-Table 设计
一、概述Iceberg 作为一个开放的 Table format,从设计之初就有一个高度抽象的设计,而 Table 是顶层的核心概念之一。
二、设计在 Iceberg 中,Table 接口代表 Iceberg 表格,是一个非常重要的接口,提供了对 Iceberg Table 的元数据信息和数据文件的操作功能,使得用户可以更加方便地创建、更新、查询和读取表格中的数据。通过 Table 接口,用户可以实现更高级的表格操作,如增量更新、重写数据文件、分区以及查询等。
https://blog.csdn.net/liliwei0213/article/details/123639603
三、数据操作
引用本站文章
数据湖-Iceberg-源码学习-Kernel-Table-数据操作
Joker
四、元数据变更TableMetadata 表示一张 ...