hive中add jar运行报错

本文介绍了在Hive中部署自定义UDF函数时遇到的问题及解决方法。当尝试加载本地编译好的jar包到Hive时,由于路径错误导致无法正确加载。通过修改Hadoop的mapred-site.xml配置文件,添加了对YARN的支持后,问题得以解决。

问题:

在自己写好udf函数,编译成jar包,在hive命令行下执行,
add jar udfs-1.0-SNAPSHOT.jar;
CREATE TEMPORARY FUNCTION strlen AS 'com.pingan.pbear.udf.StrLen';
select name, strlen(name), score from stu order by score;

上述代码涉及到order函数,hive会生成MR任务执行,报错信息如下:
`Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapreduce.job.reduces=
java.io.FileNotFoundException: File does not exist: hdfs://localhost:9000/Users/lovelife/git/pbear-offline/news/udfs/target/udfs-1.0-SNAPSHOT.jar
at org.apache.hadoop.hdfs.DistributedFileSystem$18.doCall(DistributedFileSystem.java:1122)


Job Submission failed with exception ‘java.io.FileNotFoundException(File does not exist: hdfs://localhost:9000/Users/lovelife/git/pbear-offline/news/udfs/target/udfs-1.0-SNAPSHOT.jar)’
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

如运行简单的命令则不会报错,比如
select name, strlen(name), score from stu`

解决方案:
在hadoop中修改mapred-site.xml配置文件,加上如下内容:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

名称mapreduce.framework.name指的是使用yarn运行mapreduce程序

<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 Spark 与 Hive 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. **验证依赖传递** 确保 Spark 和 Hive 的依赖版本匹配: ```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 安装路径
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值