问题描述

  1. 在UAT集群上跑Hfile作业的时候MR任务报Deserialization Error相关的反序列化错误

image.png

  1. 但是在DEV环境没有问题,可以正常是生成HFile

    问题分析

  2. 报错相关的Jar包是hive-hcatalog-core-cdh6.2.0.jar,服务端反序列化客户端上传的配置文件生成MR任务的时候报错

image.png

  1. 经过详细排查发现,有人将hive-hcatalog-core-2.1.1-cdh6.2.0.jar包打入3.0.0-cdh6.2.0-mr-framework.tar.gz中了,tar.gz这个包是yarn运行时所需的

  2. 但是比较主要的是我们开发的程序打入的jar包是cdh6.1.1的hive-hcatalog,而hive-hcatalog-core -cdh6.1.1序列化的顺序和hive-hcatalog-core -cdh6.2.0反序列化的循序不一致,所以就会导致上述的报错

问题解决

  1. 将程序中hive-hcatalog-core -cdh6.1.1修改为hive-hcatalog-core -cdh6.2.0

相关疑问

  1. 为什么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,与客 户端的版本不一致,就导致反序列化失败