鏖战大数据之java.lang.NoSuchFieldError:HIVE_STATUS_JDBC_TIMEOUT

这篇博客主要探讨了在IDEA中调试Spark程序访问远程Hive数据时遇到的`java.lang.NoSuchFieldError:HIVE_STATUS_JDBC_TIMEOUT`错误。作者指出此问题是由于Spark尝试初始化不存在的参数导致,并分享了详细的排查和解决方案,包括检查集群和本地环境的Spark-SQL访问、复制XML配置文件和Hadoop jar包、启动Hive服务、检查Maven项目配置以及添加log4j.properties。最后,作者提醒读者遇到此类问题应首先检查基础配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错如下:java.lang.NoSuchFieldError:HIVE_STATUS_JDBC_TIMEOUT

在这里插入图片描述
该问题出现在IDEA本地调试spark程序访问远程服务器上的hive数据时(在集群用spark-shell直接写spark-sql查询一般不会出现这种问题)。这个问题的意思是spark在初始化参数时没有找到HIVE_STATUS_JDBC_TIMEOUT这个参数。通过查阅资料以及源码发现在HIVE2.0之后的版本中删除了该参数,但spark却需要读这个参数的值,所以出现该问题。由于刚接触大数据不久,对底层还不够了解,无论是google还是百度对这个问题的解答星星点点,而且解决方案基本就是要么换版本,要么反编译将使用到该参数的地方给删掉再重新打包,步骤过于繁琐。仔细想想那么多人用这个版本,怎么可能大家都反编译再打包而且还没有几个人写博客出具体解决方案,所以一定是配置问题!这里赋上解决方案(使用版本spark2.3.3,hive2.3.6,hadoop2.9.2,hbase2.1.8,scala2.12.10):

1.确保在集群上使用spark-sql访问hive没有问题

2.确保本地主机(windows命令行)使用spark-sql访问集群hive没问题(非常关键)

2.1 解压全新原版spark(非集群上完成配置后)
2.2 将以下四个xml文件从集群上下载下来放spark-home/conf下(用不到hbase可以忽略掉hbase-site.xml)

在这里插入图片描述

2.3 将以下jar包从集群hbase文件目录下载到本地spark-home/jars下(htrace-core4-XXX在hadoop/share/hadoop/common/lib)

在这里插入图片描述

2.4 打开集群上hive的server2和metastore服务

hive --service hiveserver2 &
hive --service metastore &

2.5 打开spark-shell-》spark.sql(“your sql”).show查看是否出结果

3.检查你的maven项目resource下有没有上述4个xml文件,没有就放进去,然后更改hive-site.xml中的hive.metastore.warehouse.dir为

<property
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值