IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Nebula Exchange 从Hive导入 NoSuchMethodError -> 正文阅读

[大数据]Nebula Exchange 从Hive导入 NoSuchMethodError

从Hive导入guava版本冲突,重新打包exchange

环境
nebula 版本:3.2.0
hadoop 3.1.1
spark 2.4.3
hive 3.1.0
scala 2.11.12
exchange nebula-exchange_spark_2.4-3.0.0.jar

遇到问题

  1. NoSuchMethodError: com.google.common.net.HostAndPort.getHostText()
  2. NoSuchMethodError: com.google.common.base.Preconditions.checkArgument()
  3. java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory

原因

  • exchange对guava-14.0强依赖,而spark集群使用的是guava-28.0-jre,guava-16以后不再向下兼容.
  • 导致exchange和spark集群的guava互斥:
  • 使用guava-28.0-jre 那么exchange会NoSuchMethodError: com.google.common.net.HostAndPort.getHostText
  • 使用guava-14.0 那么spark集群会NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
  • pool2.PooledObjectFactory 是client启动连接池, SPARK_HOME/jars下面没有2版本的,只有1版本的, 且exchange里没有对应依赖(exchange添加依赖commons-pool2-2.4.2 commons-dbcp2-2.1.1,或者SPARK_HOME/jars下面添加均可)

在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;
)

参考
特殊依赖:neo4j-spark-connector-2.4.5-M1.jar
代码地址

特别注意

# 在测试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版本
<dependency>
    <groupId>com.vesoft</groupId>
    <artifactId>client</artifactId>
    <version>3.0.0</version>
</dependency>

  1. 安装自定义guava
# 可以自定义 pom.xml 中的 groupId,artifactId,version
# 可以自定义 pom.xml 中的 shadedPattern
cd guava-udf
mvn clean install -Dmaven.test.skip=true
  1. 安装client(可选)
# 将代码里的 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
  1. 安装cexchange(注意: com.vesoft.client 版本按需调整)
# 代码替换时: 包 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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:03:44  更:2022-09-24 21:04:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:46:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码