关于 CDH 环境中部署 Dolphinscheduler 出现 hive-jdbc 包冲突的解决办法
目前社区小伙伴经常反映在 cdh 环境中部署 Dolphinscheduler 出现 hive 包冲突的问题,报错日志信息如下:
[WARN] 2020-04-29 09:55:30.815 org.eclipse.jetty.server.HttpChannel:[590] - /dolphinscheduler/datasources/connect
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/hadoop/hive/thrift/TFilterTransport
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1053)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/thrift/TFilterTransport
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.thrift.TFilterTransport
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
这是由于官方包中的 hive-jdbc 与 cdh 环境中的版本不一致导致的,下列两种方式可以解决该问题。
1. 通过源码编译部署
如果您通过源码编译进行部署,则可以通过修改 pom 文件的方式替换 hive-jdbc 包为cdh 版本。
修改 pom.xml 文件
配置 cloudera 仓库信息
<repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </repository> </repositories>
修改 hive.jdbc.version
<!-- 这⾥以cdh5.15.1和cdh6.3.1为例, 可按实际情况修改为对应版本。 --> <!-- cdh5.15.1 --> <hive.jdbc.version>1.1.0-cdh5.15.1</hive.jdbc.version> <!-- cdh6.3.1 --> <hive.jdbc.version>2.1.1-cdh6.3.1</hive.jdbc.version>
增加 hive-shims
<!-- 具体版本按实际情况指定 --> <hive.shims.version>1.1.0-cdh5.15.1</hive.shims.version> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-shims</artifactId> <version>${hive.shims.version}</version> </dependency>
修改后重新打包编译:
mvn -U clean package -Prelease -Dmaven.test.skip=true
打包完成后可以在lib中看到如下 hive-jdbc 相关 jar 包,说明打包完成, 可以进行部署。
hive-classification-1.1.0-cdh5.15.1.jar
hive-common-1.1.0-cdh5.15.1.jar
hive-jdbc-1.1.0-cdh5.15.1.jar
hive-metastore-1.1.0-cdh5.15.1.jar
hive-serde-1.1.0-cdh5.15.1.jar
hive-service-1.1.0-cdh5.15.1.jar
hive-shims-0.23-1.1.0-cdh5.16.1.jar
hive-shims-1.1.0-cdh5.16.1.jar
hive-shims-common-1.1.0-cdh5.16.1.jar
hive-shims-scheduler-1.1.0-cdh5.16.1.jar
由于 cloudera 仓库对网络有一定要求, 如果打包时下载jar包报错,可以先将官网的包直接部署,并参照已使用官方包部署进行处理。
2. 已使用官方包部署
如果您先前已使用官方包进行部署,那么可在 cdh 集群的任意节点中, 找到 cdh 版本的 hive包。
以我的环境为例,hive包在下列路径中:
/opt/cloudera/parcels/CDH/jars
同样的,只需要在这个路径中找到hive-jdbc相关的包, 然后替换掉Dolphinscheduler lib 中的 hive 包即可(需要移除原先的 hive-jdbc 相关包)。
以下为cdh6所需要的包:
hive-common-2.1.1-cdh6.3.1.jar
hive-jdbc-2.1.1-cdh6.3.1.jar
hive-metastore-2.1.1-cdh6.3.1.jar
hive-serde-2.1.1-cdh6.3.1.jar
hive-service-2.1.1-cdh6.3.1.jar
hive-service-rpc-2.1.1-cdh6.3.1.jar
hive-shims-0.23-2.1.1-cdh6.3.1.jar
hive-shims-2.1.1-cdh6.3.1.jar
hive-shims-common-2.1.1-cdh6.3.1.jar
hive-shims-scheduler-2.1.1-cdh6.3.1.jar
替换完成后,重启 Dolphinscheduler 即可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)