Flink CDC里oracle-cdc 使用 xstream ,为啥提交任务到 yarn 上报错?

Flink CDC里oracle-cdc 使用 xstream 方式,提交任务到 yarn 上报java.lang.UnsatisfiedLinkError: no ocijdbc19 in java.library.path,这个怎么解决,ocli 已经安装了,standalone 提交方式已经测通了,但是到 yarn 上还是报错怎么办?

展开
收起
小小鹿鹿鹿 2024-04-02 22:07:46 78 发布于山西 分享
分享
版权
举报
阿里云 AI 助理回答

在使用 Flink CDC 的 oracle-cdc 连接器时,如果通过 YARN 提交任务时出现 java.lang.UnsatisfiedLinkError: no ocijdbc19 in java.library.path 错误,而 standalone 模式下运行正常,这通常与 YARN 集群环境的配置和依赖加载方式有关。以下是详细的解决方案:


问题原因

  1. OCI 依赖未正确加载
    Oracle 的 OCI 驱动(如 ocijdbc19)是本地库文件,需要通过 java.library.path 加载。YARN 集群模式下,Flink 作业运行在分布式环境中,本地库文件可能未正确分发到所有节点。

  2. YARN 环境变量未配置
    YARN 集群中,每个节点的环境变量(如 LD_LIBRARY_PATHjava.library.path)可能未包含 Oracle 客户端库路径。

  3. 依赖冲突或缺失
    即使在 standalone 模式下测试通过,YARN 模式可能会因为依赖加载顺序或版本不一致导致问题。


解决方案

步骤 1:确认 Oracle 客户端库已安装并可用

  • 确保所有 YARN 节点上都安装了 Oracle 客户端,并且 ocijdbc19 库文件存在。
  • 检查 Oracle 客户端库路径是否正确,例如 /path/to/oracle/lib

步骤 2:设置 java.library.path

  • 在提交 Flink 作业时,通过 -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"
    

步骤 3:配置 YARN 环境变量

  • 修改 YARN 的 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
    

步骤 4:将 Oracle 客户端库打包到 Flink 作业中

  • 将 Oracle 客户端库文件(如 libocijdbc19.so)打包到 Flink 作业的 JAR 文件中,并通过 classloader.parent-first-patterns.additional 参数确保优先加载这些库。例如:
    classloader.parent-first-patterns.additional: com.oracle, oracle.jdbc
    

步骤 5:验证依赖冲突

  • 检查 Flink 作业的依赖树,确保没有重复或冲突的 Oracle 驱动版本。可以通过以下命令查看依赖:
    mvn dependency:tree
    
  • 如果发现冲突,使用 <scope>provided</scope> 排除不必要的依赖。

重要提醒

  • 加粗提示:确保所有 YARN 节点上的 Oracle 客户端版本一致,避免因版本差异导致加载失败。
  • 如果问题仍未解决,建议检查 YARN 日志中的详细错误信息,定位具体问题节点。

通过以上步骤,您应该能够解决 java.lang.UnsatisfiedLinkError: no ocijdbc19 in java.library.path 的问题。如果仍有疑问,请提供更多上下文信息以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理