# nebula-exchange-udf **Repository Path**: gin-soul/nebula-exchange-udf ## Basic Information - **Project Name**: nebula-exchange-udf - **Description**: 处理guava版本冲突 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-09-22 - **Last Updated**: 2025-01-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### linux环境安装 在linux环境下打包!!! (windows下exchange打包会: scala-maven-plugin:4.4.0:compile: java.lang.NoSuchMethodError: org.fusesource.jansi.AnsiConsole.wrapOutputStream(Ljava/io/OutputStream;)Ljava/io/Output Stream; ) 特别注意(参考: https://www.cnblogs.com/1394htw/p/15151913.html) ```shell # 在测试Spark 2.4时, 发现可以不用重新打包com.vesoft.client 3.0.1 (client-java-udf)也能正常运行 # 初步怀疑冲突是在spark_hive的连接时guava包冲突暴露 # 但是代码里的import com.google.common.被替换为了import com.google.common.udf.没有去加载client里面的guava-14 # 而在spark写nebula时使用的是client下面的guava-14 # 所以如果怕麻烦,可以只修改exchange里的guava依赖和代码(增加guava-udf(必须) commons-pool2-2.4.2(可选) commons-dbcp2-2.1.1(可选)依赖), # 代码中: 包import com.google.common.geometry.{S2CellId, S2LatLng}不需要替换,虽然引用路径相同但这是独立工程,不会直接依赖guava # com.vesoft.client可以使用官方的3.0.0版本,注意别用默认的SNAPSHOT,不使用自行打包的3.0.1版本 com.vesoft client 3.0.0 ``` 1. 安装自定义guava ```shell # 可以自定义 pom.xml 中的 groupId,artifactId,version # 可以自定义 pom.xml 中的 shadedPattern cd guava-udf mvn clean install -Dmaven.test.skip=true ``` 2. 安装client(可选) ```shell # 将代码里的 import com.google.common. 替换为 import com.google.common.udf. # 代码会爆红,但不影响打包/运行(如想避免代码爆红,guava-udf里不要使用com.google.common.前缀再接udf., 可以更换为,如: my.guava.common, 同步改groupId,artifactId) cd client-java-udf mvn clean install -Dmaven.test.skip=true ``` 3. 安装cexchange(注意: com.vesoft.client 版本按需调整) ```shell # 代码替换时: 包 import com.google.common.geometry.{S2CellId, S2LatLng} 不需要替换 # 将代码里的其他的 import com.google.common. 替换为 import com.google.common.udf. 代码会爆红,但不影响打包/运行 # (如想避免代码爆红,guava-udf里不要使用com.google.common.前缀再接udf., 可以更换为,如: my.guava.common, 同步改groupId,artifactId) # exchange-common增加依赖guava-udf(必须) # 我的spark环境会NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory,故添加 commons-pool2-2.4.2(可选) commons-dbcp2-2.1.1(可选)依赖 cd exchange-udf # Spark 2.2: mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-exchange_spark_2.2 -am -Pscala-2.11 -Pspark-2.2 # Spark 2.4: mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-exchange_spark_2.4 -am -Pscala-2.11 -Pspark-2.4 # Spark 3.0: mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-exchange_spark_3.0 -am -Pscala-2.12 -Pspark-3.0 ```