配置单元元存储列宽限制

iyfamqjs  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(417)

在5.2.1版本上使用aws emr作为数据处理环境,当处理一个具有许多嵌套字段的复杂模式的巨大json文件时,hive无法处理它,并且当它达到当前4000个字符的列长度限制时出错。
处理语句时出错:失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddltask返回代码1。invalidobjectexception无效(message:invalid column 类型名称太长:[…]
看看文档,关于这个问题或类似的问题已经有很多了,尽管都没有解决[1,2]。在这种情况下,建议将metastore的几个字段更改为不同的值,以便为结构定义提供更大的长度。
COLUMNS_V2.TYPE_NAME TABLE_PARAMS.PARAM_VALUE SERDE_PARAMS.PARAM_VALUE SD_PARAMS.PARAM_VALUE 如第一期所述,拟议的解决办法提到:
[…]设置值后,还必须配置并重新启动元存储。“
然而,除了db值之外,还没有规定还必须配置什么。
因此,在更新当前本地元存储(在本例中为mysql)的字段之后 stringmediumtext 而重新启动metastore进程,仍然无法获得任何进展,因为尝试加载json继续失败,并出现相同的错误。
是我遗漏了什么,还是有人找到了解决这个问题的替代方法?

vktxenjb

vktxenjb1#

查看与配置单元问题hive-15249相关的metastore源代码,除了metastore表中设置的参数约束之外,还有一个附加检查。
尤其是在 HiveMetaStoreUtils.java 文件中,以下声明似乎是执行错误的原因:

public static final int MAX_MS_TYPENAME_LENGTH = 2000; // 4000/2, for an unlikely unicode case

因此,更改元存储中提到的值是不够的,因为代码约束将引发异常。

相关问题