资讯详情

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

📅 2026/9/24 13:38:13 | 华诺云谱 👁 阅读
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),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。