PyFlink "pipeline.classpaths" 对比 $FLINK_HOME/lib
PyFlink "pipeline.classpaths" vs $FLINK_HOME/lib
class 加载作为 PyFlink pipeline.classpath
配置的一部分传递的 classes 和将它们放入 $FLINK_HOME\lib
目录之间有什么区别?
当我想使用 flink-sql-connector-kafka-*.jar
时,只需使用 pipeline.classpath
传递它就可以正常工作,但是当我想使用具有某些外部依赖性的东西时,例如需要 [=18] 的 flink-avro-*.jar
=] 罐子。它似乎加载 flink-avro-*.jar
但它看起来无法加载 avro-*.jar
并抛出:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.avro.SchemaBuilder
当我将 avro-*.jar
添加到 $FLINK_HOME\lib
时,它工作得很好。
NoClassDefFoundError 和 ClassNotFoundException 不同
- java.lang.ClassNotFoundException 这个异常说明
在 class 路径上找不到 class。这表明我们当时
试图加载 class 定义,而 class 不存在于
class路径。
- java.lang.NoClassDefFoundError这个异常说明JVM
查看其内部 class 定义数据结构
定义了一个class,没找到。这不同于
说无法从 class 路径加载它。重点是,
NoClassDefFoundError 不一定是 class 路径问题。
flink-sql-avro-*.jar 是一个阴影 jar,它将重新定位 org.apache.flink:flink-avro org.apache.avro:avro
的路径
从NoClassDefFoundError判断可能是avro版本依赖有冲突
class 加载作为 PyFlink pipeline.classpath
配置的一部分传递的 classes 和将它们放入 $FLINK_HOME\lib
目录之间有什么区别?
当我想使用 flink-sql-connector-kafka-*.jar
时,只需使用 pipeline.classpath
传递它就可以正常工作,但是当我想使用具有某些外部依赖性的东西时,例如需要 [=18] 的 flink-avro-*.jar
=] 罐子。它似乎加载 flink-avro-*.jar
但它看起来无法加载 avro-*.jar
并抛出:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.avro.SchemaBuilder
当我将 avro-*.jar
添加到 $FLINK_HOME\lib
时,它工作得很好。
NoClassDefFoundError 和 ClassNotFoundException 不同
- java.lang.ClassNotFoundException 这个异常说明 在 class 路径上找不到 class。这表明我们当时 试图加载 class 定义,而 class 不存在于 class路径。
- java.lang.NoClassDefFoundError这个异常说明JVM 查看其内部 class 定义数据结构 定义了一个class,没找到。这不同于 说无法从 class 路径加载它。重点是, NoClassDefFoundError 不一定是 class 路径问题。
flink-sql-avro-*.jar 是一个阴影 jar,它将重新定位 org.apache.flink:flink-avro org.apache.avro:avro
的路径从NoClassDefFoundError判断可能是avro版本依赖有冲突