整合spark3.3.x和hive2.1.1-cdh6.3.2碰到个问题,就是spark官方支持的hive是2.3.x,但是cdh中的hive确是2.1.x的,项目中又计划用spark-thrift-server,导致编译过程中有部分报错。其中OperationLog这个类在hive2.3中新增加了几个方法,导致编译报错。这个时候有两种解决办法:
最终决定使用第二种方法,减少对源码的修改。
OperationLog类打包以后会出现在hive-exec-{version}.jar中,其实要做的事情很简单,就是删除这个jar中的OperationLog类,这里通过maven实现我知道的有如下两种实现办法:
上述两种方法各有优劣
第一种方法的pom中build部分如下
org.apache.maven.plugins maven-dependency-plugin 3.3.0 package copy-dependencies ${project.build.directory}/lib hive-exec org.apache.maven.plugins maven-shade-plugin 3.2.4 package shade false org.apache.hive:hive-exec org.apache.hive:hive-exec META-INF/*.MF META-INF/*.SF META-INF/*.DSA META-INF/*.RSA org/apache/hadoop/hive/ql/session/OperationLog*
第二种方法的pom中build部分如下
org.apache.maven.plugins maven-jar-plugin 3.2.0 default-jar package jar **/OperationLog*.class org.apache.maven.plugins maven-dependency-plugin 3.3.0 package copy-dependencies ${project.build.directory}/lib org.apache.maven.plugins maven-antrun-plugin 1.8 package run
虽然上述两种方法都能达到目的,第一种看着简洁一点,第二种看着操作复杂一点。不过我还是倾向于第二种,首先第二种不会减少和增加包的数量,包体积变化也不会太大,看着也更加符合预期的目的,其次第二种操作完以后看起来很简洁,更加适合强迫症或者代码洁癖患者。
参考链接:
maven-shade-plugin
maven-antrun-plugin