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 就被保存 ...
Hadoop-组件-HDFS-源码学习-HDFS 架构设计-NameNode 架构-元数据管理
看源码啦~~~😊
元数据主要是指整个集群的信息,包括数据目录信息、节点信息、数据块位置存储信息、集群通信信息以及心跳信息等等,最重要的用途就是方便集群管理,快速地找到正确有效的信息。
一、什么是元数据?为了保证用户操作元数据高效,延迟低,NameNode 把所有的元数据(文件系统命名空间 namespace)都存储在内存中。内存中的元数据是最完整的,包括文件自身属性信息、文件块位置映射信息。但是内存的致命问题是,断点数据丢失,数据不会持久化。因此 NameNode 又辅佐了元数据文件(fsimage+edits)来保证元数据的安全完整。
HDFS 的目录和文件在内存中是以一棵树的形式存储的,这个目录树结构是由 Namenode 维护的,Namenode 会修改这个树形结构以对外提供添加和删除文件等操作功能。这也是我们通过管理界面可以对文件做的一些操作~
文件系统目录树上的节点还保存了 HDFS 文件与数据块的对应关系, HDFS 中的每个文件都是被拆分成若干数据块冗余存放的,文件与数据块的对应关系也是由 Namenode 维护的。
二、内存元数据元数据(文件系统的命名空间 ...
Hadoop-组件-HDFS-源码学习-HDFS 架构设计-NameNode 架构-租约管理
一、概述HDFS 文件是 write-once-read-many,并且不支持客户端的并行写操作,需要一种机制保证对 HDFS 文件的互斥操作。HDFS 提供了租约(Lease) 机制来实现这个功能,租约是 Namenode 给予租约持有者(LeaseHolder,一般是客户端)在规定时间内拥有文件权限(写文件)的合同。
在 HDFS 中,客户端写文件时需要先从租约管理器(LeaseManager)申请一个租约,成功申请租约之后客户端就成为了租约持有者,也就拥有了对该 HDFS 文件的独占权限,其他客户端在该租约有效时无法打开这个 HDFS 文件进行操作。Namenode 的租约管理器保存了 HDFS 文件与租约、租约与租约持有者的对应关系,租约管理器还会定期检查它维护的所有租约是否过期。租约管理器会强制收回过期的租约,所以租约持有者需要定期更新租约(renew),维护对该文件的独占锁定。当客户端完成了对文件的写操作,关闭文件时,必须在租约管理器中释放租约。
二、理论笔记三、实现3.1. 相关类HDFS 客户端是可以同时打开多个 HDFS 文件进行读写操作的,为了便于管理,在租约管 ...
Flink-源码学习-API-Connector 体系
一、概述Flink 做为新一代流批统一的计算引擎,程序主要由三部分组成: Source、Transformation 和 Sink。 Source 从不同的第三方存储引擎中把读取数据,利用各种算子进行处理加工 (transform),然后再输出到另外的存储引擎中(Sink),在运行时,Flink 上运行的程序会被映射成 “逻辑数据流”(Dataflows),每一个 Dataflow 以一个或多个 Sources 开始以一个或多个 Sinks 结束。Connector (包括: Source 和 Sink) 的作用就相当于一个连接器,连接 Flink 计算引擎跟外界存储系统。为了使 Flink 能够访问外部数据源,Flink 内置了大量的 Connector,也提供了自定义 Connector 机制,目前 Connector 接口分为DataStream/DataSet/Table API 三个不同的栈。
Table API 是基于前两者的封装。
二、DataSet/Stream Connector2.1. Source2.1.1. 设计在早期版本中,Flink Connector ...
Flink-源码学习-API-Connector-Sink 设计
一、概述SinkFunction 先是被 StreamSink 包装,然后被 DataStreamSink 包装,最后通过 DataStreamSink.getTransformation 作为 operator 添加到 ExecutionEnvironment。SinkFunction 做为核心接口类,包含一个 invoke 方法,用于数据输出,每条记录都会执行一次 $invoke$ 方法,执行输出操作。
Flink-源码学习-API-Connector-Source 设计
一、Before Flink 1.10~在 Flink 1.10 之前,Source connector 对于批模式和流模式需要不同的处理逻辑。
https://blog.csdn.net/qq_21383435/article/details/126816224
https://zhuanlan.zhihu.com/p/454440159
https://blog.csdn.net/sinat_39809957/article/details/125527633
1.1. 设计1.1.1. Inputformat在 DataSet API 中 Source 对应的核心接口为 InputFormat。
InputSplitSource 负责划分 InputSplit
InputSplit 表示一个逻辑分区,InputFormat 会根据 Split ID 读取输入数据的对应分区。
RichInputFormat 拓展 InputFormat,增加 $openInputFormat$ 和 $closeInputFormat$ 方法来管理运行时的状态。相比 InputFo ...
Flink-源码学习-Blob 服务
一、概述Blob 服务用来管理二进制文件(例如上传 job 的 jar 以及依赖的一些 jar,或者 TaskManager 上传的 log 文件等…)
当向 Flink 提交一个 Job 的时候,blob 服务端将会把用户的代码分发到所有工作节点TaskManager
1.1. Flink 中支持的 BLOB 文件类型
jar 包
被 user classloader 使用的 jar 包
高负荷 RPC 消息
RPC 消息长度超出了 akka.framesize 的大小
在 HA 摸式中,利用底层分布式文件系统分发单个高负荷 RPC 消息,比如: TaskDeploymentDescriptor,给多个接受对象。
失败导致重新部署过程中复用RPC消息
TaskManager 的日志文件
为了在 web ui 上展示taskmanager的日志
二、实现2.1. 架构设计2.1.1. BlobStoreBLOB 底层存储支持多种实现 HDFS ,S3,FTP FTP 等,HA 中使用 BlobStore 进行文件的恢复。它有两个实现类,分别是 VoidBlobS ...