hive脚本出现Error: java.lang.RuntimeException: Error in configuring object和Caused by: java.lang.IndexOut...

本文分析了在Hive查询过程中出现的Reduce阶段错误,详细介绍了错误原因及排查过程,并给出了可能的解决方案。

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

是在reduce阶段报的错误,详细错误信息是

朱传豪  19:04:48
Diagnostic Messages for this Task:
Error: java.lang.RuntimeException: Error in configuring object
	at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109)
	at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:75)
	at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
	at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:409)
	at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:392)
	at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:415)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1642)
	at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:106)
	... 9 more
Caused by: java.lang.RuntimeException: Reduce operator initialization failed
	at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.configure(ExecReducer.java:173)
	... 14 more
朱传豪  19:05:00
Caused by: java.lang.IndexOutOfBoundsException: Index: 9, Size: 9
	at java.util.ArrayList.rangeCheck(ArrayList.java:635)
	at java.util.ArrayList.get(ArrayList.java:411)
	at org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector.init(StandardStructObjectInspector.java:121)
	at org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector.<init>(StandardStructObjectInspector.java:109)
	at org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory.getStandardStructObjectInspector(ObjectInspectorFactory.java:283)
	at org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory.getStandardStructObjectInspector(ObjectInspectorFactory.java:268)
	at org.apache.hadoop.hive.ql.exec.LateralViewJoinOperator.initializeOp(LateralViewJoinOperator.java:105)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:376)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:460)
	at org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:416)
	at org.apache.hadoop.hive.ql.exec.Operator.initializeOp(Operator.java:401)
	at org.apache.hadoop.hive.ql.exec.UDTFOperator.initializeOp(UDTFOperator.java:95)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:376)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:460)
	at org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:416)
	at org.apache.hadoop.hive.ql.exec.SelectOperator.initializeOp(SelectOperator.java:65)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:376)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:460)
	at org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:416)
	at org.apache.hadoop.hive.ql.exec.Operator.initializeOp(Operator.java:401)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:376)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:460)
	at org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:416)
	at org.apache.hadoop.hive.ql.exec.SelectOperator.initializeOp(SelectOperator.java:65)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:376)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:460)
	at org.apache.hadoop.hive.ql.exec.Operator.initializeChildren(Operator.java:416)
	at org.apache.hadoop.hive.ql.exec.GroupByOperator.initializeOp(GroupByOperator.java:427)
	at org.apache.hadoop.hive.ql.exec.Operator.initialize(Operator.java:376)
	at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.configure(ExecReducer.java:166)
	... 14 more


FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 75  Reduce: 5   Cumulative CPU: 2318.05 sec   HDFS Read: 5031117214 HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 38 minutes 38 seconds 50 msec
朱传豪  19:08:09

  

我的hive版本是hive-0.13.1+cdh5.3.6+397

 

执行的脚本是:

 insert into table Hive_OnlineFirstActive_newtest partition(ProductId,partitiondate) 
select newData.* from (
select mytable.ClientIp,iptocode(mytable.ClientIp,'6') as province,iptocode(mytable.ClientIp,'7') as city,mytable.imei1,mytable.imei2,mytable.plat,mytable.nettype,mytable.myvername,mytable.os,mytable.clientchannel,hour(mytable.serverdate),mytable.productid,substring(mytable.serverdate,1,10) as partitiondate from (
select UniqueImeiUDAF(concat_ws('^',ServerDate,IMEI1,IMEI2,Plat,NetType,MyVername,Os,ProductId,ClientChannel,ClientIp)) as r from Hive_OnlinePvData where partitiondate>='2016-04-16' and partitiondate<='2016-05-01' group by IMEI1,ProductId 
)tt lateral view FirstActiveUDTF(r) mytable
)newData 
left join 
Hive_OnlineFirstActive_newtest oldData 
on newData.imei1 = oldData.imei1 and newData.ProductId = oldData.ProductId  
where oldData.imei1 is null; 

注意,iptocode是个UDF

 

然后网上查到:https://issues.apache.org/jira/browse/HIVE-5771

 

我理解,这个是hive的bug,在sql优化器优化时可能找不到udf的jar包,该问题是hive0.14.0进行fixed

 

### 解决 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、付费专栏及课程。

余额充值