Flink CDC里oracle-cdc 使用 xstream 方式,提交任务到 yarn 上报java.lang.UnsatisfiedLinkError: no ocijdbc19 in java.library.path,这个怎么解决,ocli 已经安装了,standalone 提交方式已经测通了,但是到 yarn 上还是报错怎么办?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用 Flink CDC 的 oracle-cdc
连接器时,如果通过 YARN 提交任务时出现 java.lang.UnsatisfiedLinkError: no ocijdbc19 in java.library.path
错误,而 standalone 模式下运行正常,这通常与 YARN 集群环境的配置和依赖加载方式有关。以下是详细的解决方案:
OCI 依赖未正确加载
Oracle 的 OCI 驱动(如 ocijdbc19
)是本地库文件,需要通过 java.library.path
加载。YARN 集群模式下,Flink 作业运行在分布式环境中,本地库文件可能未正确分发到所有节点。
YARN 环境变量未配置
YARN 集群中,每个节点的环境变量(如 LD_LIBRARY_PATH
或 java.library.path
)可能未包含 Oracle 客户端库路径。
依赖冲突或缺失
即使在 standalone 模式下测试通过,YARN 模式可能会因为依赖加载顺序或版本不一致导致问题。
ocijdbc19
库文件存在。/path/to/oracle/lib
。java.library.path
-Djava.library.path
参数指定 Oracle 客户端库路径。例如:
flink run -Djava.library.path=/path/to/oracle/lib -t yarn-application your-flink-job.jar
flink-conf.yaml
中添加以下配置:
env.java.opts: "-Djava.library.path=/path/to/oracle/lib"
yarn-site.xml
文件,确保所有节点的 LD_LIBRARY_PATH
包含 Oracle 客户端库路径。例如:
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>LD_LIBRARY_PATH</value>
</property>
~/.bashrc
或 /etc/profile
中添加:
export LD_LIBRARY_PATH=/path/to/oracle/lib:$LD_LIBRARY_PATH
libocijdbc19.so
)打包到 Flink 作业的 JAR 文件中,并通过 classloader.parent-first-patterns.additional
参数确保优先加载这些库。例如:
classloader.parent-first-patterns.additional: com.oracle, oracle.jdbc
mvn dependency:tree
<scope>provided</scope>
排除不必要的依赖。通过以上步骤,您应该能够解决 java.lang.UnsatisfiedLinkError: no ocijdbc19 in java.library.path
的问题。如果仍有疑问,请提供更多上下文信息以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。