美文网首页
Flink Seesion模式下Dynamic User Cod

Flink Seesion模式下Dynamic User Cod

作者: 淡淡的小番茄 | 来源:发表于2022-01-21 11:38 被阅读0次

    在Flink On yarn模式下,如果以Session模式启动。则事先需要启动Flink session,这里的session是flink中的概念,启动好后会启动job manager,因为是On yarn模式,我们资源申请,任务调度的入口都是通过yarn来执行的,对应的是yarn中的AM(Application Manager)概念。

    Session模式下,通过yarn-session命令先启动一个session。可以指定slots个数、AM、TM的内存大小。具体参数,直接可以执行如下命令查看:

    ./bin/yarn-session.sh --help

    Flink On Yarn模式下,Sesseion启动好后,可以通过yarn控制台,查看AM的状态,默认端口为8099。地址为:

    http://node1:8099/cluster/apps/RUNNING

    Flink运行的相关jar,上传到hdfs上的,默认端口为50070,可以通过如下地址查看:http://node1:50070/explorer.html。可以看到每个AM下都会有一套Flink运行需要的jar,形如:

    Session启动好后,就可以通过flink run命令提交任务了。值得注意的是,对于session模式下,提交的user jar(Dynamic User Code)是不会上传到hdfs服务器上的。Flink中针对这些user jar,通过BlobServer来进行管理,在Job Manager启动后,会相应的启动BlobServer。On Yarn模式下,会在hadoop的tmp文件夹下生成blobStore文件夹,形如:/data/hadoop/current/tmp/nm-local-dir/usercache/deployer/appcache/application_1632642003960_0046。Task Manager在运行的时候,会调用BlobServer进行user jar的下载。Per-Job模式相对于Session是不一样的,其采用的是独立会话的方式。user jar信息也会上传到hdfs中的,作为系统的lib。hdfs路径如下:

    Flink 运行的时候,Job Manager 和 Task Manager都处于不同的进程中,运行的user jar(Dynamic User Code)和运行依赖的jar都需要能共同访问的。所以就需要共享存储或者提供公共服务。共享存储Flink On Yarn模式使用的是hdfs,Flink中使用BlobServer提供jar的下载服务。

    另外,我们来看下Flink类加载器设计机制,相关的类主要包括三类:

    1、Java Classpath

    Java 的通用类路径,它包括 JDK 库,以及 Flink/lib文件夹中的所有代码(Apache Flink 的类和一些依赖项)。

    2、Flink 插件组件

    Flink 文件夹下文件夹中的插件代码/plugins。Flink 的插件机制会在启动时动态加载一次。

    3、动态用户代码

    这些都是包含在动态提交作业的 JAR 文件中的所有类(通过 REST、CLI、Web UI)。它们在每个作业中动态加载(和卸载)。

    且看Flink类加载器类图:

    ChildFirstClassLoader和ParentFirstClassLoader两个类加载器是平级的,都继承FlinkUserCodeClassLoader,以这种方式,Flink打破了双亲委派模式。默认是ChildFirstClassLoader优先。

    相关文章

      网友评论

          本文标题:Flink Seesion模式下Dynamic User Cod

          本文链接:https://www.haomeiwen.com/subject/nwjehrtx.html