记录hive on spark缺少包ClassNotFoundException: org.antlr.runtime.tree.CommonTree的异常解决

文章描述了一位开发者遇到的代码异常问题,具体是由于缺失ANTLRruntime的CommonTree类导致。在CDH6.2.0环境下,尝试添加ANTLR4的jar路径未解决问题,因为该版本不包含CommonTree类。最终,通过引入ANTLR3的runtime库,成功解决了这个问题,通过在spark-default配置中添加额外的依赖路径。

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

1、发现问题

公司有个开发的同事跟我反馈,他一段代码里面有个开窗函数累加的代码一直出异常,界面上显示的日志很模糊,看不出什么问题,只能捞application的执行日志了

2、找到问题并解决

让开发的同事重新查询一次并把对应的application的id发我,查看执行日志里面有个确实类的错误:ClassNotFoundException: org.antlr.runtime.tree.CommonTree ,定位到应该就是缺少类了.
在在网上查询这个类是在antlr-runtime包里,在cdh(博主用的版本是cdh6.2.0)的spark的jar路径下发现有个antlr4-runtime-4.7.jar的包,虽然有点奇怪为什么还是会缺这个类,路径应该是在依赖路径了啊,没得办法还是手工在spark-default加多两个额外依赖路径配置

spark.driver.extraClassPath=/opt/cloudera/parcels/CDH/lib/spark/jars/*
spark.executor.extraClassPath=/opt/cloudera/parcels/CDH/lib/spark/jars/*

找了开发重新跑sql,还是一样的错误,后面还是找到原因了,原来在antlr4的包里是不包含CommonTree类的,只有3版本的才有,如图
在这里插入图片描述
最后在spark-default加上额外的依赖解决了

spark.driver.extraClassPath=/opt/cloudera/parcels/CDH/jars/antlr-runtime-3.4.jar
spark.executor.extraClassPath=/opt/cloudera/parcels/CDH/jars/antlr-runtime-3.4.jar
### 解决 Hive 配置中 `java.lang.ClassNotFoundException: com.mysql.jdbc.Driver` 的问题 当遇到 `java.lang.ClassNotFoundException: com.mysql.jdbc.Driver` 错误时,通常是因为 MySQL JDBC 驱动程序未被正确加载或配置不当。以下是针对此问题的具体解决方案: #### 1. 确认使用的 MySQL Connector 版本 如果项目中配置的 `driver-class-name` 是 `com.mysql.jdbc.Driver`,那么所使用的 MySQL 连接器版本应为 **5.x**[^3]。对于较新的连接器版本(8.x),类名已更改为 `com.mysql.cj.jdbc.Driver`。 因此,在确认驱动名称之前,请先检查当前项目的依赖项以及所需的 MySQL Connector-Jar 文件版本。 #### 2. 将正确的 JAR 文件放置到 Hive 类路径下 为了使 Hive 能够正常访问 MySQL 数据库作为其元存储,需将相应的 MySQL 驱动程序 JAR 文件复制至 Hive 的 lib 目录中。具体操作如下: - 下载适用于您环境的 MySQL Connector/J (推荐使用与 Hive 和 MySQL 兼容的版本)[^4]。 - 假设下载后的文件名为 `mysql-connector-java-5.1.xx-bin.jar`,将其拷贝到 Hive 安装目录下的 `lib` 子目录中。例如: ```bash cp mysql-connector-java-5.1.xx-bin.jar /path/to/hive/lib/ ``` #### 3. 修改 Hive Site Configuration (`hive-site.xml`) 确保在 Hive 的配置文件 `hive-site.xml` 中设置了正确的 JDBC URL 及 Driver 名称。以下是一个典型的配置示例: ```xml <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false</value> </property> ``` 注意:上述 `<value>` 字段中的参数可能依据实际需求有所调整,比如主机地址、端口号或者 SSL 设置等。 #### 4. 检查 Spark 或其他框架集成情况 如果您正在通过 PySpark 访问 Hive 并遇到了类似的错误消息,则还需要验证是否已经把 MySQL 驱动加入到了 Spark 的 jars 路径之中[^5]。可以按照下面的方式处理: - 如果采用默认方式启动 Spark Shell 或提交作业,则只需简单地将所需 jar 放入 `$SPARK_HOME/jars/` 即可; - 对于自定义部署场景,可通过命令行选项指定额外资源位置,如: ```bash spark-submit --jars /path/to/mysql-connector-java-5.1.xx-bin.jar your_application.py ``` 完成以上步骤之后重启服务并重新尝试执行相关查询动作来检验修复效果如何。 ```python from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("Test") \ .enableHiveSupport() \ .getOrCreate() df = spark.sql("SHOW DATABASES;") df.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值