HessianProtocolException:expected map/object at java.lang.Long (RPC netty与hessian)

下午在解决包mybatis-jobs的冲突, 解决了很长时间, 总结一下对于RPC 调用的包冲突

1. hessian 冲突 :HessianProtocolException: ‘3’ is an unknown class definition

		<dependency> 			
           <groupId>com.caucho</groupId>
		   <artifactId>hessian</artifactId> 			
           <version>3.1.5</version>
		</dependency>
com.caucho.hessian.io.HessianProtocolException: '3' is an unknown class definition
	at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1711)
	at com.baomidou.jobs.rpc.serialize.impl.HessianSerializer.deserialize(HessianSerializer.java:45)
	... 33 common frames omitted

2. netty 冲突: HessianProtocolException: expected map/object at java.lang.Long (26740)

<dependency>
		<groupId>io.netty</groupId>
		<artifactId>netty-all</artifactId>
		<version>4.1.29.Final</version>
	</dependency>
Caused by: com.caucho.hessian.io.HessianProtocolException: expected map/object at java.lang.Long (26740)
	at com.caucho.hessian.io.AbstractDeserializer.error(AbstractDeserializer.java:108)
	at com.caucho.hessian.io.AbstractMapDeserializer.readObject(AbstractMapDeserializer.java:70)
	at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1756)
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/java/jdk1.8/bin:/opt/software/hadoop/hadoop-2.9.2/bin:/opt/software/hadoop/hadoop-2.9.2/sbin:/opt/software/zookeeper-3.9.3/bin:/usr/local/scala/bin:/root/bin:/usr/local/java/jdk1.8/bin:/opt/software/hadoop/hadoop-2.9.2/bin:/opt/software/hadoop/hadoop-2.9.2/sbin:/opt/software/zookeeper-3.9.3/bin:/usr/local/scala/bin:/opt/apache-hive-2.3.7-bin/bin) SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/apache-hive-2.3.7-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/software/hadoop/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </configuration>; expected </property>. at [row,col,system-id]: [9,15,"file:/opt/apache-hive-2.3.7-bin/conf/hive-site.xml"] at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2961) at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2730) at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2605) at org.apache.hadoop.conf.Configuration.get(Configuration.java:1362) at org.apache.hadoop.hive.conf.HiveConf.getVar(HiveConf.java:3904) at org.apache.hadoop.hive.conf.HiveConf.getVar(HiveConf.java:3973) at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:4060) at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:4003) at org.apache.hadoop.hive.common.LogUtils.initHiveLog4jCommon(LogUtils.java:81) at org.apache.hadoop.hive.common.LogUtils.initHiveLog4j(LogUtils.java:65) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:702) at org.apache.hadoop.hi
最新发布
03-24
<think>好的,我需要解决用户提到的Hive配置文件hive-site.xml中的“Unexpected close tag”错误以及SLF4J多个绑定的问题。首先,我得回忆一下Hive配置的常见问题。 关于“Unexpected close tag”错误,用户引用了错误信息,提到在hive-site.xml的第96行出现了意外的闭合标签。这可能是因为XML结构不正确,比如标签没有正确闭合或嵌套错误。我需要检查用户确认配置文件的结构是否正确,尤其是是否有未闭合的标签或标签顺序错误。比如,可能在</configuration>之前少了一个闭合标签,或者多了一个标签。此外,用户提到的错误中还提到了行号和位置,这可以帮助用户定位问题。另外,XML注释中的特殊字符,如“--”,也可能会导致解析错误,需要注意。 然后是SLF4J多个绑定的问题。SLF4J在类路径中检测到多个日志框架绑定,比如同时存在log4j和logback的情况。用户需要检查Hive和Hadoop的依赖库,排除多余的绑定。例如,Hive可能自带log4j,而用户的项目中可能又引入了log4j-over-slf4j或者其他日志实现的jar包,导致冲突。这时候需要找出重复的jar文件,并在构建工具中排除它们,比如Maven或Gradle的exclude语句。另外,检查Hive和Hadoop的lib目录,是否有冲突的日志jar包,手动移除多余的版本。 接下来,我需要结合用户提供的引用信息。引用[2]指出错误是由于hive-site.xml中的闭合标签问题,可能是在某个元素结束前提前关闭了。引用[1]提到了Hive CLI启动时的元存储连接问题,这可能配置错误有关联,但当前问题更直接的是XML解析错误。引用[3]提到的是集群部署的完成情况,可能用户的环境是已经安装好的,但配置过程中出现了问题。 可能的解决步骤是:首先验证hive-site.xml的格式是否正确,使用XML验证工具或者在线格式化工具检查。然后,确保所有标签正确闭合,没有嵌套错误。比如,检查是否有未闭合的<property>标签,或者<configuration>标签是否正确闭合。其次,处理SLF4J绑定问题,检查类路径中的日志jar包,移除重复的绑定,例如保留log4j,排除slf4j-log4j12以外的其他绑定。 此外,用户可能需要检查Hive和Hadoop的版本兼容性,确保所有组件的版本匹配,避免因版本不一致导致的依赖冲突。例如,Hive 4.0Hadoop 3.x是否兼容,HBase的版本是否适配等。 最后,用户可能需要查看日志文件,确认错误发生的详细位置,是否有其他相关错误信息,这有助于进一步诊断问题。例如,查看Hive的启动日志,确认SLF4J警告的具体绑定情况,以及XML解析错误的上下文。</think>### Hive配置错误日志绑定问题解决方案 #### 一、解决`hive-site.xml`的`Unexpected close tag`错误 此错误通常由XML格式不规范导致,需按以下步骤排查: 1. **检查标签闭合嵌套** - 确保所有XML标签严格成对且正确嵌套,例如: ```xml <configuration> <property> <name>hive.metastore.uris</name> <value>thrift://node01:9083</value> </property> </configuration> ``` - 使用XML验证工具(如`xmllint`)检查语法: ```bash xmllint --noout hive-site.xml ``` - 若提示标签不匹配,需逐行检查闭合顺序[^2]。 2. **处理特殊字符** - XML注释中避免使用`--`,建议改用`<!-- 注释内容 -->`格式。 - 属性值中的特殊符号(如`&`, `<`)需转义为`&`, `<`。 3. **验证配置项完整性** - 检查Hive依赖的Hadoop配置是否同步更新,例如`core-site.xml`中需包含: ```xml <property> <name>hadoop.proxyuser.hive.hosts</name> <value>*</value> </property> ``` --- #### 二、解决SLF4J多绑定冲突 SLF4J检测到多个日志框架(如Log4jLogback)时会产生警告,需统一日志实现: 1. **定位冲突的JAR包** - 检查Hive和Hadoop的`lib`目录,查找重复绑定的日志库: ```bash find /opt/module/hive/lib/ -name "*slf4j*" find /opt/module/hadoop/share/hadoop/common/lib/ -name "*slf4j*" ``` - 常见冲突包:`slf4j-log4j12.jar`(Log4j绑定)`logback-classic.jar`(Logback绑定)。 2. **排除冗余依赖** - **Maven项目**:在`pom.xml`中排除冲突包: ```xml <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> ``` - **手动部署**:删除`lib`目录中多余的JAR文件,例如: ```bash rm /opt/module/hive/lib/logback-classic.jar ``` 3. **统一日志配置** - 确保`log4j.properties`路径正确,并在`hive-env.sh`中指定: ```bash export HIVE_LOG_DIR=/opt/module/hive/logs export HIVE_CONF_DIR=/opt/module/hive/conf ``` --- #### 三、验证修复效果 1. **重启Hive服务** ```bash hive --service metastore & hive ``` 2. **观察日志输出** - 若不再提示`WstxEOFException`,说明XML错误已修复[^2]。 - 若SLF4J警告消失,表明日志绑定冲突解决。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值