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),仅供参考

相关新闻

Hive 中的 Colony 改进机制:Reflexion、记忆、技能与 Playbook 系统化

Hive 中的 Colony 改进机制:Reflexion、记忆、技能与 Playbook 系统化

人工智能AI Agent多智能体MCP 服务工具调用浏览器控制 【免费下载链接】hive Multi-Agent Harness for Production AI 项目地址: https://gitcode.com/gh_mirrors/hive48/hive 点击查看 免费下载 导读:Hive 的 Colony(蜂群)不是一…

2026/9/24 13:38:15 阅读更多 →
HyperDX 反向代理子路径部署指南:Nginx 与 Traefik 配置深度解析

HyperDX 反向代理子路径部署指南:Nginx 与 Traefik 配置深度解析

可观测性云原生运维 【免费下载链接】hyperdx Resolve production issues, fast. An open source observability platform unifying session replays, logs, metrics, traces and errors powered by ClickHouse and OpenTelemetry. 项目地址: https://gitcode.com/g…

2026/9/24 13:38:15 阅读更多 →
F´ 组件命令字典详解:以 Test1 命令组件为例,读懂 XML 命令定义与字典生成

F´ 组件命令字典详解:以 Test1 命令组件为例,读懂 XML 命令定义与字典生成

嵌入式系统编程 【免费下载链接】fprime F - A flight software and embedded systems framework 项目地址: https://gitcode.com/gh_mirrors/fpri/fprime 点击查看 免费下载 组件命令字典(Component Dictionary)是 F 飞行软件框架中一类由 …

2026/9/24 13:37:14 阅读更多 →

最新新闻

2026年蓝牙耳机排行榜10强:从芯片到降噪的选购指南

2026年蓝牙耳机排行榜10强:从芯片到降噪的选购指南

1. 2026年的蓝牙耳机市场:为什么“看榜单下单”越来越不靠谱先说说我今天为什么要聊这个话题。蓝牙耳机这个品类,每年排行榜都在变,但2026年的榜单说实话比往年更有参考价值,也更难做。原因很简单:产业链彻底成熟了。以…

2026/9/24 19:30:01 阅读更多 →
从许可证到合规治理:COSCon‘25木兰开放日共读开源法律与实践

从许可证到合规治理:COSCon‘25木兰开放日共读开源法律与实践

每年开源圈子里,最让人期待的事之一,就是中国开源年会(COSCon)。今年COSCon‘25木兰技术开放日的议程正式发布之后,我第一时间把完整内容翻了一遍,最感兴趣也最想聊的,是围绕《开源法律、政策与…

2026/9/24 19:30:01 阅读更多 →
本地餐饮同城外卖系统开发,订单超时补偿逻辑设计

本地餐饮同城外卖系统开发,订单超时补偿逻辑设计

本地餐饮同城外卖系统开发,订单超时补偿逻辑设计同城餐饮外卖履约过程中,订单配送超时属于高频突发场景,受骑手路况、爆单积压、天气恶劣、地址难找等多种因素影响。为降低用户投诉率、提升平台口碑,多数成熟外卖平台都配备标准化…

2026/9/24 19:30:01 阅读更多 →
4G广播厂家那么多,为何有的延迟高、易掉线?问题不在“4G”,而在“云”与“端”

4G广播厂家那么多,为何有的延迟高、易掉线?问题不在“4G”,而在“云”与“端”

1. 引言:同样是4G广播,体验为何天差地别? 在应急广播、村村通大喇叭、景区/园区/校园广播等场景中,4G广播(4G 应急广播、4G 音柱、4G 收扩机)凭借无需布线、即装即用、远程可控的优势,正在快速替…

2026/9/24 19:30:01 阅读更多 →
为什么单个巨型指令文件会失败:learn-harness-engineering 的指令拆分、信噪比与按需展开实践

为什么单个巨型指令文件会失败:learn-harness-engineering 的指令拆分、信噪比与按需展开实践

【免费下载链接】learn-harness-engineering Harness engineering beginner tutorial, from 0 to 1 项目地址: https://gitcode.com/gh_mirrors/le/learn-harness-engineering 点击查看 免费下载 本文是 learn-harness-engineering 课程第四讲的完整技术指南&#…

2026/9/24 19:30:01 阅读更多 →
Python+OpenCV答题卡识别实战:透视校正与填涂判定

Python+OpenCV答题卡识别实战:透视校正与填涂判定

简介:这是一套面向计算机相关专业毕业设计场景的智能答题卡识别系统完整资料,基于Python与OpenCV实现,适合正在准备毕设或需要图像识别项目实战练习的学习者。项目经导师指导并通过评审,源码均经本地编译调试,可正常运…

2026/9/24 19:29:01 阅读更多 →

日新闻

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

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

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

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →