问题解决-hive使用spark引擎执行SQL时,yarn报错:java.lang.NoClassDefFoundError: org/antlr/runtime/tree/CommonTree

本文介绍在使用CDH 6.2.0版本下的Hive 2.1.0与Spark 2.4.0环境中,创建Hive外表并查询数据时遇到的错误及其解决办法。错误原因为spark执行引擎缺少antlr-runtime-3.5.2.jar文件。

项目场景:

在Hive老版本中,Hive在执行HSQL语句时,默认的执行引擎是后台执行MR(MapReduce)任务;随着Spark的兴起,如今Hive版本都是使用spark引擎作为SQL语句的执行引擎,因为spark是基于内存的计算引擎,相比MR计算更加快速,更让大众所青睐。
环境描述:

名称版本号
CDH6.2.0
Hive2.1.0
Spark2.4.0

问题描述:

创建Hive外表

create  table if not exists stu(id int ,name string) row format delimited fields terminated by '\t';

查询数据条数

select count(*) from stu;

hive server日志中报错信息:

java.lang.RuntimeException: org.apache.thrift.transport.TTransportException: Invalid status-0
.......
Caused by: org.apache.thrift.transport.TTransportException: Invalid status-0

yarn页面任务报错信息:

java.lang.NoClassDefFoundError: org/antlr/runtime/tree/CommonTree

原因分析:

使用CDH6.x时,因为Hive后台使用的是spark作为执行引擎,有时会报以下问题;而在使用MR作为执行引擎时,报错消失,HSQL语句能够正常执行,并产生查询数据。
从hive shell执行结果报错,报的是spark Driver问题

从yarn页面找到执行任务,可以看出是没有找到类java.lang.NoClassDefFoundError: org/antlr/runtime/tree/CommonTree,说明缺少jar包。
至于缺少jar包的原因并没有找到,这个问题其实很诡异,以前安装CDH时,并未出现过该问题,hive使用spark引擎正常使用,而这次报错是对CDH进行了二次安装,由其他同事安装,我在使用时遇到的报错。所以缺包的根本问题没有找到,怀疑与hive和spark组件的安装顺序有关。


解决方案:

对于缺包的问题,当然就是找到对应的jar包,其实org/antlr/runtime/tree/CommonTree所在的jar在hive的lib库中包含。就是hive的lib下的antlr-runtime-3.5.2.jar。
可以通过命令进行查找该jar包

find / -name "antlr-runtime-*"

将hive的lib库下的antlr-runtime-3.5.2.jar拷贝到spark的lib库下

cp /opt/cloudera/parcels/CDH/lib/hive/lib/antlr-runtime-3.5.2.jar /opt/cloudera/parcels/CDH/lib/spark/lib/

重启spark和hive即可。

结语:如若文章有何不妥之处欢迎指正,谢谢!

<think>问题分析:用户在执行Hive on Spark遇到`java.lang.NoClassDefFoundError: org/apache/spark/SparkConf`错误。这个错误表明在运行Hive on Spark任务Spark的核心类没有被正确加载。需要从Hive on Spark的配置角度来解决。 ### 原因分析: 1. **Spark依赖未正确配置**:Hive on Spark需要将Spark的jar包添加到Hive的类路径中。 2. **环境变量设置错误**:`SPARK_HOME`未设置或设置不正确。 3. **Hive配置缺失**:`hive-site.xml`中未正确配置Spark相关属性。 4. **版本不兼容**:Hive版本与Spark版本不兼容。 ### 解决方案: #### 1. 设置SPARK_HOME环境变量 确保在Hive运行环境中正确设置`SPARK_HOME`,指向Spark的安装目录。 ```bash export SPARK_HOME=/path/to/spark ``` #### 2. 配置hive-site.xml 在`hive-site.xml`中添加以下配置: ```xml <property> <name>spark.home</name> <value>/path/to/spark</value> </property> <property> <name>spark.master</name> <value>yarn</value> <!-- 或者根据你的集群模式设置,如local --> </property> <property> <name>hive.execution.engine</name> <value>spark</value> </property> ``` #### 3. 复制Spark的jar包到Hive的lib目录下(可选但推荐) 为了避免类加载问题,可以将Spark的jar包链接或复制到Hive的lib目录中: ```bash ln -s $SPARK_HOME/jars/*.jar $HIVE_HOME/lib/ ``` 或者,如果Hive配置了使用Spark的依赖,确保`$SPARK_HOME/jars`被包含在类路径中。 #### 4. 检查版本兼容性 确认使用Hive版本和Spark版本是兼容的。例如: - Hive 2.3.x 兼容 Spark 2.0.x, 2.1.x, 2.2.x, 2.3.x - Hive 3.x 兼容 Spark 2.4.x, 3.x #### 5. 检查Hive的日志 查看Hive的详细日志,通常在`/tmp/<username>/hive.log`,寻找更具体的错误信息。 ### 验证步骤: 在Hive CLI中执行以下命令验证配置: ```sql SET hive.execution.engine=spark; SELECT count(*) FROM your_table; -- 替换为你的表名 ``` §§相关问题§§ 1. Hive on Spark 需要哪些基本配置才能正常运行? 2. 如何解决 Hive on Spark 中出现的类冲突问题? 3. Hive on SparkHive on MapReduce 在性能上有哪些差异? 4. 如何为 Hive on Spark 配置资源分配(如executor内存、核心数)? 5.Hive on Spark 中遇到 `ClassNotFoundException` 应该如何处理?</think>### Hive on Spark 报错 `java.lang.NoClassDefFoundError: org/apache/spark/SparkConf` 解决方案 此错误表明 Hive执行 Spark 任务无法找到 Spark 核心类,根本原因是 **Spark 依赖未正确加载到 Hive 的运行环境**。以下是具体解决步骤: #### 核心解决方法 1. **配置 `SPARK_HOME` 环境变量** 在 Hive 的配置文件中明确指定 Spark 路径: ```bash # 在 hive-env.sh 中添加 export SPARK_HOME=/opt/spark # 替换为实际路径 export HIVE_CONF_DIR=$HIVE_HOME/conf ``` 2. **强制加载 Spark JAR 包** 在 `hive-site.xml` 中添加类路径配置: ```xml <property> <name>hive.aux.jars.path</name> <value>${SPARK_HOME}/jars/*</value> </property> ``` 3. **验证依赖传递** 确保 SparkHive 的依赖版本匹配: ```bash # 检查 Spark 版本 $SPARK_HOME/bin/spark-submit --version # 检查 Hive 支持的 Spark 版本 grep "spark.version" $HIVE_HOME/conf/spark-defaults.conf ``` #### 高级排查步骤 4. **检查 JAR 冲突** 删除 Hive 中与 Spark 冲突的旧版 JAR: ```bash rm $HIVE_HOME/lib/guava-*.jar # 常见冲突 rm $HIVE_HOME/lib/snappy-java-*.jar # 常见冲突 ``` 5. **配置 Spark 执行器类路径** 在 `spark-defaults.conf` 中添加: ```properties spark.executor.extraClassPath = ${SPARK_HOME}/jars/* spark.driver.extraClassPath = ${SPARK_HOME}/jars/* ``` 6. **使用诊断命令验证** 在 Hive CLI 中运行: ```sql SET spark.master; -- 检查是否返回yarn/local SET spark.home; -- 检查路径是否正确 ADD JAR ${spark.home}/jars/spark-core_2.12.jar; -- 手动加载测试 ``` #### 注意事项 - 重启 Hive 服务使配置生效 - 推荐版本组合:Hive 3.x + Spark 3.1.x -YARN 模式下需确保所有节点有相同 Spark 安装路径
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值