首页/新闻资讯/正文详情

Flink SQL JAR 语句完全指南:ADD JAR / SHOW JARS / REMOVE JAR 的用法与原理

发布时间:2026/9/24 13:38:10 来源:云帆数科 栏目:资讯中心
Flink SQL JAR 语句完全指南:ADD JAR / SHOW JARS / REMOVE JAR 的用法与原理
大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载Flink SQL 的 JAR 语句ADD JAR、SHOW JARS、REMOVE JAR用于在运行时向会话的 classpath 中动态添加、查看或移除用户 JAR例如自定义 UDF、连接器等让开发者无需重启集群即可扩展作业能力。本文以 Apache Flink 当前仓库的官方文档为主体结合 AddJarOperation.java、ResourceManager.java 等源码实现带你掌握 JAR 语句的完整语法、SQL CLI 实操示例、底层资源注册机制以及使用时的关键限制。JAR 语句概览JAR 语句用于在运行时将用户 JAR 添加到 classpath、从 classpath 移除 JAR或查看当前 classpath 中已添加的 JAR 列表。Flink SQL 目前支持以下三种 JAR 语句语句作用ADD JAR将用户 JAR 添加到资源列表即 classpathSHOW JARS展示所有通过ADD JAR添加的 JARREMOVE JAR移除通过ADD JAR添加的指定 JAR在源码层面这三种语句分别对应 flink-table-api-java 模块org.apache.flink.table.operations.command包下的三个 Operation 类AddJarOperation、ShowJarsOperation与RemoveJarOperation。它们均实现了Operation接口其中AddJarOperation还实现了ExecutableOperation说明它携带真正的执行逻辑而ShowJarsOperation实现了ShowOperation用于展示查询结果。运行 JAR 语句JAR 语句的典型运行环境是 SQL CLIFlink SQL 客户端。在 SQL CLI 中输入 JAR 语句并回车即可执行每条语句执行后会返回执行结果提示。以下示例展示了在 SQL CLI 中依次执行ADD JAR、SHOW JARS、REMOVE JAR的完整过程Flink SQL ADD JAR /path/hello.jar; [INFO] Execute statement succeeded. Flink SQL ADD JAR hdfs:///udf/common-udf.jar; [INFO] Execute statement succeeded. Flink SQL SHOW JARS; ---------------------------- | jars | ---------------------------- | /path/hello.jar | | hdfs:///udf/common-udf.jar | ---------------------------- Flink SQL REMOVE JAR /path/hello.jar; [INFO] The specified jar is removed from session classloader.从示例可以看到添加本地路径 JAR 与远程文件系统 JAR 均返回Execute statement succeededSHOW JARS以表格形式输出所有已添加 JAR 的路径列名为jars顺序与添加顺序一致REMOVE JAR成功后提示该 JAR 已从session classloader会话类加载器中移除。在 SQL CLI 的帮助命令中这三种语句的定义也能看到其语义描述见 CliStrings.javaADD JAR将指定 JAR 文件添加到提交作业的 classloader语法为ADD JAR path_to_filename.jarREMOVE JAR从提交作业的 classloader 中移除指定 JAR语法为REMOVE JAR path_to_filename.jarSHOW JARS展示用户指定的 JAR 依赖列表该列表受--jar、--library启动选项以及ADD/REMOVE JAR命令的共同影响。ADD JARADD JAR path_to_filename.jarADD JAR将一个 JAR 文件添加到资源列表中。它支持添加位于本地或远程文件系统的 JAR关于远程文件系统的支持范围可参考 文件系统总览。添加成功后可以通过SHOW JARS语句查看已添加的 JAR。语法要点路径参数必须用单引号包裹路径后缀应为.jar支持file://、hdfs://等 scheme 前缀例如ADD JAR hdfs:///udf/common-udf.jar远程路径的 JAR 会在注册时被下载到本地临时目录详见下文源码解析。源码实现与执行链路ADD JAR的执行由AddJarOperation.execute(Context ctx)驱动见 AddJarOperation.javaOverride public TableResultInternal execute(Context ctx) { ResourceUri resourceUri new ResourceUri(ResourceType.JAR, getPath()); try { ctx.getResourceManager().registerJarResources(Collections.singletonList(resourceUri)); return TableResultImpl.TABLE_RESULT_OK; } catch (IOException e) { throw new TableException( String.format(Could not register the specified resource [%s]., resourceUri), e); } }执行链路的关键步骤如下将 JAR 路径包装为ResourceUri资源类型为ResourceType.JAR调用ResourceManager.registerJarResources()完成注册注册成功返回TABLE_RESULT_OK失败则抛出TableException并携带资源信息。在 ResourceManager.java 中registerJarResources的实现进一步揭示了两点底层细节public void registerJarResources(ListResourceUri resourceUris) throws IOException { registerResources( prepareStagingResources( resourceUris, ResourceType.JAR, true, url - { try { JarUtils.checkJarFile(url); } catch (IOException e) { throw new ValidationException( String.format(Failed to register jar resource [%s], url), e); } }, false), true); }事务式注册注册过程采用先暂存staging再真正注册的两阶段方式一旦列表中有任意资源注册失败整个注册过程会回滚避免产生半注册状态合法性校验注册前会对 JAR 执行JarUtils.checkJarFile(url)校验确保其是合法的 JAR 文件非法文件会抛出ValidationException。此外ResourceManager的构造逻辑见 ResourceManager.java说明了远程 JAR 的处理方式本地下载目录由配置项table.resources.download-dir决定默认值为System.getProperty(java.io.tmpdir)即系统临时目录定义见 TableConfigOptions.java。从源码结构可以推断远程 JAR 会被下载到该目录下以flink-table-UUID命名的子目录中并交由MutableURLClassLoader动态加载到 classpath——这就是无需重启即可加载新 JAR的实现基础。使用限制请勿使用ADD JAR语句来加载 Hive 的 source/sink/function/catalog。这是 Hive 连接器的一个已知限制known limitation将在未来版本中修复。目前建议按照 Hive 连接器依赖配置指南 中的说明来搭建 Hive 集成。SHOW JARSSHOW JARS展示所有通过ADD JAR语句添加的 JAR。该语句的底层实现是ShowJarsOperation见 ShowJarsOperation.javaOverride public TableResultInternal execute(Context ctx) { String[] jars ctx.getResourceManager().getResources().keySet().stream() .map(ResourceUri::getUri) .toArray(String[]::new); return buildStringArrayResult(jars, jars); }其内部逻辑为从ResourceManager.getResources()返回不可变视图见 ResourceManager.java中取出所有已注册资源的 URI并以列名为jars的字符串数组结果返回。因此SHOW JARS输出中的jars列名直接来源于源码中的buildStringArrayResult(jars, jars)调用。REMOVE JARREMOVE JAR path_to_filename.jar移除通过ADD JAR语句添加的指定 JAR。路径参数同样需要与添加时完全一致的字符串包含 scheme 前缀例如添加时写hdfs:///udf/common-udf.jar移除时也必须写hdfs:///udf/common-udf.jar。在源码层面RemoveJarOperation见 RemoveJarOperation.java仅实现了Operation接口其asSummaryString()返回REMOVE JAR path形式的语句摘要而实际的移除动作由 SQL CLI 的会话类加载器完成这也与 REMOVE 成功后返回的提示语The specified jar is removed from session classloader相互印证。使用限制注意REMOVE JAR语句仅在 SQL CLI 中可用。从源码实现看这一限制在 SQL Gateway 侧有明确印证OperationExecutor.callRemoveJar方法直接抛出UnsupportedOperationException(SQL Gateway doesnt support REMOVE JAR syntax now.)见 OperationExecutor.java即 SQL Gateway 当前不支持REMOVE JAR语法。常见问题与最佳实践1. 为什么ADD JAR后SHOW JARS看不到请检查是否使用了不同的路径写法如file:///path/a.jar与/path/a.jar会被视为不同资源是否在添加时使用了相对路径导致解析后的绝对路径不一致是否在 SQL Gateway 会话中操作不同会话的 classloader 相互隔离。2. 远程 JAR 的加载时机从 ResourceManager.java 的实现看ADD JAR执行时即会校验并注册资源注册成功的 JAR 会立即进入当前会话的 classloader 可见范围。对于远程文件系统如 HDFS、S3、OSS请确保目标文件系统已按 文件系统插件指南 正确配置。3. 需要动态加载 Hive 组件怎么办如文档所述ADD JAR目前不能用于加载 Hive source/sink/function/catalog。正确的做法是按照 Hive 连接器依赖配置指南 中关于依赖dependencies的说明在启动时通过--jar、--library等选项或在lib/目录中放置依赖来搭建 Hive 集成。4. 确认当前会话已加载的 JAR可以直接在 SQL CLI 中执行SHOW JARS查看当前会话的 JAR 列表。注意该列表不仅包含ADD JAR添加的资源还包含通过--jar、--library启动选项传入的依赖见 CliStrings.java 对SHOW JARS的描述。总结ADD JAR、SHOW JARS、REMOVE JAR构成了 Flink SQL 在运行时动态管理用户依赖的完整闭环ADD JAR负责将本地或远程 JAR 校验、暂存并注册到会话 classpath底层由ResourceManager与MutableURLClassLoader支撑SHOW JARS实时展示当前会话已注册的 JAR 列表REMOVE JAR从会话 classloader 中移除指定 JAR但当前仅 SQL CLI 支持。掌握这三个语句你可以在不重启集群的前提下灵活扩展 SQL 作业的 UDF、连接器与格式库同时注意规避 Hive 集成与 SQL Gateway 场景下的已知限制。赞分享大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载相关推荐Flink SQL JAR 语句实战指南ADD JAR / SHOW JARS / REMOVE JAR 用法与底层原理Flink SQL JAR 语句实战指南ADD JAR / SHOW JARS / REMOVE JAR 用法与底层原理 JAR 语句是 Flink SQL大数据流处理批处理数据工程Flink Hive 方言 ADD 语句完全指南用 ADD JAR 向类路径动态加载用户 JARFlink Hive 方言 ADD 语句完全指南用 ADD JAR 向类路径动态加载用户 JAR Hive 方言Hive Dialect是 Flink T大数据流处理批处理数据工程Apache Spark SQL 资源管理语句全解析ADD/LIST FILE、JAR 与 ARCHIVE 的语法、参数与底层实现Apache Spark SQL 资源管理语句全解析ADD/LIST FILE、JAR 与 ARCHIVE 的语法、参数与底层实现 导读 在 Apache S大数据数据分析批处理流处理机器学习图计算上一篇Tartube开发者指南深入理解Python GUI应用架构下一篇9cc项目架构与代码组织如何构建易于理解的编译器源代码结构创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

办公AI实战横评:从文档摘要到会议自动化,谁才是真生产力工具?
办公AI实战横评:从文档摘要到会议自动化,谁才是真生产力工具?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:38:04

grammars-v4 仓库 TypeScript 语法详解:基于 ANTLR v4 的实用主义 TypeScript 解析方案
grammars-v4 仓库 TypeScript 语法详解:基于 ANTLR v4 的实用主义 TypeScript 解析方案

编程语言编译器开发工具 【免费下载链接】grammars-v4 Grammars written for ANTLR v4; expectation that the grammars are free of actions. 项目地址: https://gitcode.com/gh_mirrors/gr/grammars-v4 点击查看 免费下载 导读 本文聚焦 grammars-v4 仓库中 jav… · 2026/9/24 13:38:04

探索开放资源的无限可能:Jackett
探索开放资源的无限可能:Jackett

探索开放资源的无限可能:Jackett 项目介绍 Jackett 是一个强大的开源代理服务器软件,它为众多流行的下载管理器(如Sonarr, Radarr, SickRage等)提供服务。通过翻译和解析各种追踪器站点的独特查询语法,Jackett使得从… · 2026/9/24 13:37:57

在 Vue 3 + Vite 中接入 InstantDB:从环境配置、Schema 同步到实时查询的完整实战指南
在 Vue 3 + Vite 中接入 InstantDB:从环境配置、Schema 同步到实时查询的完整实战指南

在 Vue 3 Vite 中接入 InstantDB:从环境配置、Schema 同步到实时查询的完整实战指南 【免费下载链接】instant Instant is the best backend for AI-coded apps. You get auth, permissions, storage, presence, and streams — everything you need to ship apps … · 2026/9/24 14:47:28

Maven多模块编译加速:从30分钟到8分钟的工程实践
Maven多模块编译加速:从30分钟到8分钟的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:47:21

F´ (F Prime) 开源飞控框架快速入门与核心架构指南
F´ (F Prime) 开源飞控框架快速入门与核心架构指南

嵌入式系统编程 【免费下载链接】fprime F - A flight software and embedded systems framework 项目地址: https://gitcode.com/gh_mirrors/fp/fprime 点击查看 免费下载 F(F Prime)是由 NASA 喷气推进实验室(JPL)开… · 2026/9/24 14:47:21

FerretDB 求值查询运算符实战指南:`$mod` 取模与 `$regex` 正则匹配全解析
FerretDB 求值查询运算符实战指南:`$mod` 取模与 `$regex` 正则匹配全解析

FerretDB 求值查询运算符实战指南:$mod 取模与 $regex 正则匹配全解析 【免费下载链接】FerretDB A truly Open Source MongoDB alternative 项目地址: https://gitcode.com/gh_mirrors/fe/FerretDB 求值查询运算符(Evaluation Query Operators&a… · 2026/9/24 14:47:21

Flet MenuStyle 完全指南:用 12 个属性精确控制菜单外观
Flet MenuStyle 完全指南:用 12 个属性精确控制菜单外观

前端跨平台桌面应用移动开发 【免费下载链接】flet Build realtime web, mobile and desktop apps in Python only. No frontend experience required. 项目地址: https://gitcode.com/gh_mirrors/fl/flet 点击查看 免费下载 flet.MenuStyle 是 Flet 中专门用于定义… · 2026/9/24 14:47:20

PaddleSpeech 流式 TTS 在线引擎(Python 动态图后端)源码级解析与实战指南
PaddleSpeech 流式 TTS 在线引擎(Python 动态图后端)源码级解析与实战指南

人工智能语音音频 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword… · 2026/9/24 14:47:11

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码