1. 先记住一条总原则:混用 DataStream + Table 时,用 DataStream API 配依赖
文档强调了一句非常关键的话:
如果一个 Job 里混用了 Python DataStream API 和 Python Table API,建议通过 DataStream API 去指定依赖,这样两边都能生效。
也就是:
- 纯 Table:
table_env.get_config()/table_env.add_python_* - 混用:优先
StreamExecutionEnvironment的add_jars / add_python_file / set_python_requirements / add_python_archive / set_python_executable
2. JAR 依赖:pipeline.jars vs pipeline.classpaths vs add_jars vs add_classpaths
2.1 Table API 方式
A)pipeline.jars:上传到集群(最常用)
- 只能
file://本地路径 - 会把 JAR 上传到集群
table_env.get_config().set("pipeline.jars","file:///my/jar/path/connector.jar;file:///my/jar/path/json.jar")
Windows 示例(注意还是 file:///):
table_env.get_config().set("pipeline.jars","file:///E:/my/jar/path/connector.jar;file:///E:/my/jar/path/json.jar")
B)pipeline.classpaths:不上传,只加到 classpath(要求集群也能访问同路径)
- 你必须保证 client、cluster 都能访问这些 URL(比如共享盘、同目录、分发好了)
table_env.get_config().set("pipeline.classpaths","file:///opt/flink/jars/connector.jar;file:///opt/flink/jars/json.jar")
一句话:
- 你不想折腾分发:用
pipeline.jars - 你已经把 jar 管理好并且集群路径一致:用
pipeline.classpaths
2.2 DataStream API 方式(混用场景首选)
A)add_jars(...):上传到集群
env.add_jars("file:///my/jar/path/connector1.jar",)

