hive on spark 读取json数据失败

昨天帮朋友分析了个问题:hive on spark场景下,使用json数据格式存储文件,使用hive自带的序列化方式。当计算引擎为mr时,可以正常读取,使用spark引擎时报错。

建表语句如下:

hive on spark 读取json数据失败

报错如下:

hive on spark 读取json数据失败

看到这个报错,估计是序列化和反序列化方式不匹配导致的,查看日志,果然是因为找不到反序列化器。日志报错如下:

hive on spark 读取json数据失败

解决思路:

1.将hive序列化方式的jar包添加到spark的lib目录下。

2.spark默认序列化方式为kryo,不知道是不是kryo序列化方式不支持json格式的数据,可尝试设置spark的默认序列化方式为java自带的序列化方式。

3.建表时使用自定义的序列化方式,并将自定义序列化方式的jar包分别放进hive和spark的lib目录下。

第三种方式可参考:https://blog.****.net/weixin_43674082/article/details/88028617

朋友使用的cdh版本是6.0+,链接内github中只有4.0+和5.0+的对应版本,如果时间充裕的化,可以自己实现一个。

由于朋友的leader说这个问题不处理了,使用json格式存储的化,就用mr引擎,其他的用spark引擎。所以以上三个方式都没有实践,如果其他朋友遇到以上问题,可尝试这样处理。