问题描述
- 在UAT集群上跑Hfile作业的时候MR任务报Deserialization Error相关的反序列化错误


经过详细排查发现,有人将hive-hcatalog-core-2.1.1-cdh6.2.0.jar包打入3.0.0-cdh6.2.0-mr-framework.tar.gz中了,tar.gz这个包是yarn运行时所需的
但是比较主要的是我们开发的程序打入的jar包是cdh6.1.1的hive-hcatalog,而hive-hcatalog-core -cdh6.1.1序列化的顺序和hive-hcatalog-core -cdh6.2.0反序列化的循序不一致,所以就会导致上述的报错
问题解决
- 将程序中hive-hcatalog-core -cdh6.1.1修改为hive-hcatalog-core -cdh6.2.0
相关疑问
- 为什么DEV可以运行,而UAT不能运行?
环境说明:
DEV环境3.0.0-cdh6.2.0-mr-framework.tar.gz包中没有hive-hcatalog-core-cdh6.2.0.jar
UAT环境的3.0.0-cdh6.2.0-mr-framework.tar.gz有hive-hcatalog-core-cdh6.2.0.jar
运行原理:
客户端使用hive-hcatalog-core -cdh6.1.1版本的jar包序列化相关配置上传至HDFS中
对于服务器来说如果3.0.0-cdh6.2.0-mr-framework.tar.gz中有hive-hcatalog-core包就用我自己的进行反序列化,如果没有就使用客户端上传的jar包
问题解释:
DEV环境没有所以就使用客户端上传的hive-hcatalog-core -cdh6.1.1版本的jar包,而客户端使用该版本的jar包进行序列化,理所应当就可以使用该版本的jar包进行反序列化
因为UAT环境是有hive-hcatalog-core的jar包的,所以就用自己的,那么自己的版本是hive-hcatalog-core-cdh6.2.0.jar,与客 户端的版本不一致,就导致反序列化失败
