背景知识
在使用 per-job 模式提交 Flink 作业到 YARN 集群时,会将依赖的 JAR 包、flink-conf.yaml 配置文件以及用户自定义的 JAR 包上传到 HDFS 的指定路径。
YARN 集群会根据资源情况为 Flink 作业分配不同的容器,每个 TaskManager 会占用一个独立的容器。
随后,YARN 利用资源本地化机制将相关的依赖从 HDFS 下载到各个容器所在的节点。
这样,TaskManager在执行任务逻辑时可以直接使用本地的资源,无需再从远程 HDFS 上拉取文件,从而提高了作业的执行效率。
主要Java类及相关路径
资源本地化的主要java类:ResourceLocalizationService。类中包含下载资源所需的线程xxxLocalizer等内部类,服务的初始化及启停等方法。
资源本地化的主要java类:ResourceLocalizationService。类中包含下载资源所需的线程xxxLocalizer等内部类,服务的初始化及启停等方法。
YARN 将资源分为三类:PUBLIC、PRIVATE 和 APPLICATION。不同级别的资源具有不同的访问权限,这直接影响了资源的本地化方式。
检查启动taskmanager的contaier日志,会发现flink作业中本地资源可见性为APPLICATION。