开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

flink打胖jar还是找不到类flink类加载机制是不是跟传统java是反的?

flink打胖jar还是找不到类flink类加载机制是不是跟传统java是反的?

展开
收起
真的很搞笑 2023-10-11 07:47:07 183 0
3 条回答
写回答
取消 提交回答
  • Flink 的类加载机制与传统的 Java 类加载机制有一些区别,但并不是完全相反。下面是关于 Flink 类加载的一些重要概念和机制:

    1. 用户代码和库依赖:在 Flink 中,用户需要将自己编写的代码打包为可执行的 JAR 文件,其中包括应用程序的逻辑和所需的第三方库依赖。这个 JAR 文件会被提交给 Flink 集群来运行。

    2. 分布式类加载:Flink 使用分布式类加载机制来在集群中动态加载用户的 JAR 文件和依赖项。当作业提交到 Flink 集群时,Flink 会将 JAR 文件分发到各个 TaskManager 节点,并在每个节点上进行类加载。这样,所有任务都可以访问相同的用户代码和依赖项。

    3. 网络类加载器(NetworkClassLoader):Flink 使用网络类加载器来加载分布式环境中的类文件。网络类加载器负责从远程节点下载和加载所需的类。这种方式允许 Flink 在集群中动态地加载用户的代码,而无需在每个节点上提前配置和部署。

    4. 可见性:Flink 的类加载机制确保了用户代码和依赖项在整个集群中的可见性,以便在任务执行期间正确加载和使用。这使得 Flink 可以在分布式环境中运行复杂的应用程序,包括涉及自定义函数、序列化器和用户定义状态等的情况。

    2023-10-11 13:27:19
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    Flink的类加载机制与传统的Java类加载机制有一些不同。Flink使用的是基于类路径的类加载器,而不是像Java那样使用基于类加载器树的类加载器。
    在Flink中,可以通过org.apache.flink.api.common.classloading.FlinkUserCodeClassLoader类来加载用户自定义的类。这个类加载器是基于类路径的,也就是说,它会查找用户的类路径中是否存在用户自定义的类。如果类路径中没有找到用户自定义的类,那么Flink就会抛出ClassNotFoundException异常。
    在Flink中,通常建议使用打胖jar的方式将用户自定义的类打包成jar包。这样,用户自定义的类就可以被Flink的类加载器找到,而不需要用户手动配置类路径。
    需要注意的是,Flink的类加载机制是基于类路径的,因此用户自定义的类需要放在类路径中。如果用户自定义的类不在类路径中,那么Flink就无法加载这个类。因此,在使用Flink时,需要注意类路径的设置和管理,以确保用户自定义的类可以被Flink的类加载器找到。

    2023-10-11 11:53:19
    赞同 展开评论 打赏
  • Flink的类加载机制确实与传统Java的类加载机制有些不同。

    在传统的Java应用中,类的加载是由线程上下文类加载器(Thread Context Class Loader)或系统类加载器(System Class Loader)进行的。然而,Flink的类加载器是在TaskManager或JobManager进程中创建的,这些类加载器在进程的整个生命周期内存在,而不是在创建线程时创建。这意味着,对于同一个Flink进程内的所有线程,它们共享相同的类加载器。

    因此,当你将代码打包到Flink的运行环境中时(例如,打成fat jar或jar with dependencies),你需要确保所有的依赖库都被正确地包含在包中。这是因为Flink的类加载器不会像传统的Java应用那样从系统的类路径或用户的类路径中加载类。

    此外,Flink的类加载机制也支持用户自定义的类加载器。这使得用户可以在Flink的应用程序中实现自己的类加载逻辑,例如,加载特定的版本或二进制格式的外部库。

    2023-10-11 08:54:00
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
    The Reactive Cloud Native Arch 立即下载
    JAVA开发手册1.5.0 立即下载